我有两个数组。 第一个是结构,一个包含类别内所有元素的关联数组。类别的名称是该数组中的键。这些类别可以有不同的深度: 检查这个例子:
$structure = [
'fruits' => [
'sweet' => [
'red' => [
'watermelon' =>['id' => 1],
'cherry' =>['id' => 2],
'litchi' =>['id' => 3]
],
'white' => [
'coco' =>['id' => 13],
'lucuma' =>['id' => 14],
]
],
'sour' => [
'lemon' =>['id' => 4],
'orange' =>['id' => 5],
'tangerine' =>['id' => 6]
],
],
'colors' => [
'black' =>['id' => 7],
'green' =>['id' => 8],
'blue' => ['id' => 9]
],
'names' => [
'jack' =>['id' => 10],
'paul' =>['id' => 11],
'peter' =>['id' => 12]
]
];
我有第二个数组,其中包含我要搜索的元素:
$results = ['coco', 'green','peter'];
我需要编写一个函数,给出一个输出数组,其中包含元素和它们所属的类别树。像这样的事情:
$resultsInStructure = [
'fruits' => [
'sweet' => [
'white' => [
'coco' => ['id' => 13]
]
]
],
'colors' => [
'green' =>['id' => 8]
],
'names' => [
'peter' =>['id' => 12]
]
];
当然,该函数需要递归。要么走第二个数组的第一个,只是我无法做到正确......任何帮助表示赞赏!
最佳答案
试试这个
function walk($arr,$results)
{
if (is_array($arr))
{
$arrFound = [];
$arrTmpReturn = [];
foreach($arr AS $key => $val)
{
if (in_array($key, $results))
{
$arrFound = array_merge($arrFound,[$key => $val]);
}
$arrReturn = walk($val,$results);
if (!is_null($arrReturn))
{
$arrTmpReturn = array_merge($arrTmpReturn,[$key => $arrReturn]);
}
}
if (count($arrFound) > 0) return $arrFound;
if (count($arrTmpReturn) > 0) return $arrTmpReturn;
}
}
print_r(walk($structure,$results));
关于php - 如果值存在于另一个数组中,如何递归过滤数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44432459/