php - 通过将单维数组的每个值与嵌套多维数组的“名称”键匹配来创建一个新的单维数组
问题描述
这是多维嵌套数组,称为multi
:-
Array
(
[0] => Array
(
[id] => 4d4b7104d754a06370d81259
[name] => Arts & Entertainment
[pluralName] => Arts & Entertainment
[shortName] => Arts & Entertainment
[icon] => Array
(
[prefix] => https://ss3.4sqi.net/img/categories_v2/arts_entertainment/default_
[suffix] => .png
)
[categories] => Array
(
[0] => Array
(
[id] => 56aa371be4b08b9a8d5734db
[name] => Amphitheater
[pluralName] => Amphitheaters
[shortName] => Amphitheater
[icon] => Array
(
[prefix] => https://ss3.4sqi.net/img/categories_v2/arts_entertainment/default_
[suffix] => .png
)
[categories] => Array
(
[0] => Array
(
[id] => 4bf58dd8d48988d1f8931735
[name] => Bed & Breakfast
[pluralName] => Bed & Breakfasts
[shortName] => B & B
[icon] => Array
(
[prefix] => https://ss3.4sqi.net/img/categories_v2/travel/bedandbreakfast_
[suffix] => .png
)
[categories] => Array
(
)
)
[1] => Array
(
[id] => 4f4530a74b9074f6e4fb0100
[name] => Boarding House
[pluralName] => Boarding Houses
[shortName] => Boarding
[icon] => Array
(
[prefix] => https://ss3.4sqi.net/img/categories_v2/travel/hotel_
[suffix] => .png
)
[categories] => Array
(
)
)
)
)
[1] => Array
(
[id] => 4fceea171983d5d06c3e9823
[name] => Aquarium
[pluralName] => Aquariums
[shortName] => Aquarium
[icon] => Array
(
[prefix] => https://ss3.4sqi.net/img/categories_v2/arts_entertainment/aquarium_
[suffix] => .png
)
[categories] => Array
(
)
)
)
[1] => Array
(
[id] => 4d4b7105d754a06372d81259
[name] => College & University
[pluralName] => Colleges & Universities
[shortName] => College & Education
[icon] => Array
(
[prefix] => https://ss3.4sqi.net/img/categories_v2/education/default_
[suffix] => .png
)
[categories] => Array
(
[0] => Array
(
[id] => 4bf58dd8d48988d198941735
[name] => College Academic Building
[pluralName] => College Academic Buildings
[shortName] => Academic Building
[icon] => Array
(
[prefix] => https://ss3.4sqi.net/img/categories_v2/education/academicbuilding_
[suffix] => .png
)
[categories] => Array
(
[0] => Array
(
[id] => 4bf58dd8d48988d199941735
[name] => College Arts Building
[pluralName] => College Arts Buildings
[shortName] => Arts
[icon] => Array
(
[prefix] => https://ss3.4sqi.net/img/categories_v2/arts_entertainment/default_
[suffix] => .png
)
[categories] => Array
(
)
)
)
)
[1] => Array
(
[id] => 4bf58dd8d48988d197941735
[name] => College Administrative Building
[pluralName] => College Administrative Buildings
[shortName] => Administrative Building
[icon] => Array
(
[prefix] => https://ss3.4sqi.net/img/categories_v2/education/administrativebuilding_
[suffix] => .png
)
[categories] => Array
(
)
)
)
)
)
这是一维数组,称为single
:-
array(
[0] => 'Aquarium',
[1] => 'Amphitheater'
)
我想创建一个函数,该函数将递归地遍历多维数组,并且当 的值与 的single
“名称”键匹配时multi
,将形成一个新数组,其中将包含与匹配的每个节点的“id”和“名称” single
。
我该怎么做?
这是我试图做的,但不知何故无法弄清楚如何进行递归调用:-
public static function array_flatten($fs_array, $cat_array) {
if (!is_array($fs_array)) {
return FALSE;
}
$result = array();
foreach ($fs_array as $key => $value)
{
if(in_array($value['name'], $cat_array))
$result[] = $value['id'];
}
return $result;
}
解决方案
我根据您的示例构建了一个解决方案。我没有测试它,但它背后的想法是:
您检查是否有一个“类别”键,它是一个数组,如果有,则获取该子数组并将其再次传递给 flatten_array。递归调用的返回值随后将被合并到 $result 数组中。
public static function array_flatten($fs_array, $cat_array) {
if (!is_array($fs_array)) {
return FALSE;
}
$result = array();
foreach ($fs_array as $key => $value)
{
if(in_array($value['name'], $cat_array)) {
$result[] = $value['id'];
}
// ----- here starts what I added -----------
if (is_array($value['categories'])) {
$result = array_merge($result, self::array_flatten($value['categories'], $cat_array));
}
// ----- here ends what I added -----------
}
return $result;
}
推荐阅读
- java - 使用映射键值过滤对象列表,替换映射值
- asp.net-core - 如何在 ASP.net 核心中间件中使用 HttpResponseFeature
- c# - 从抽象类派生时如何避免组合类爆炸?
- c++ - 模棱两可的 fread()/fwrite() 文档
- continuous-integration - 如何定期运行 gitlab 阶段?
- ruby-on-rails - 访问管理属性和管理?ruby on rails中的方法
- mdx - 如何从 MDX 中的日期级别提取月、年和日期
- mysql - 连接三个联结表
- qt - ALSA 的 .asoundrc 的默认值是什么?
- python - ModuleNotFoundError:没有名为“torch.nn”的模块;“火炬”不是 Mac OS 上的软件包