php - 如何在php中获取深度未知的多维数组上每个数组的索引
问题描述
array(2) { [0]=> array(2) { ["name"]=> string(16) "Daerah Pertanian" ["sub"]=> array(6) { [0]=> array(2) { ["name"]=> string(5) "Sawah" ["value"]=> string(3) "145" } [1]=> array(2) { ["name"]=> string(18) "Sawah Pasang Surut" ["value"]=> string(3) "455" } [2]=> array(2) { ["name"]=> string(6) "Ladang" ["value"]=> string(3) "678" } [3]=> array(2) { ["name"]=> string(10) "Perkebunan" ["value"]=> string(3) "688" } [4]=> array(2) { ["name"]=> string(19) "Perkebunan Campuran" ["value"]=> string(3) "966" } [5]=> array(2) { ["name"]=> string(16) "Tanaman Campuran" ["value"]=> string(3) "565" } } } [1]=> array(2) { ["name"]=> string(22) "Daerah Bukan Pertanian" ["sub"]=> array(2) { [0]=> array(2) { ["name"]=> string(18) "Hutan Lahan Kering" ["sub"]=> array(2) { [0]=> array(2) { ["name"]=> string(25) "Hutan Lahan Kering Primer" ["value"]=> string(3) "566" } [1]=> array(2) { ["name"]=> string(27) "Hutan Lahan Kering Sekunder" ["value"]=> string(3) "255" } } } [1]=> array(2) { ["name"]=> string(17) "Hutan Lahan Basah" ["sub"]=> array(2) { [0]=> array(1) { ["name"]=> string(24) "Hutan Lahan Basah Primer" } [1]=> array(1) { ["name"]=> string(26) "Hutan Lahan Basah Sekunder" } } } } } }
我有一个上面提到的数组,所以我想打印出每个“名称”键,包括它的数组父级的索引(编号),
例如,当我打印出“Tanaman Campuran”时,所有索引父级都是(0)(5),当我打印“Hutan Lahan Basah Sekunder”时,索引父级是(1)(1)(1)
我怎样才能实现它?
这是我尝试过的一些递归函数
$GLOBALS['all'] = '';
function printout($arr){
foreach ($arr as $ia=>$a){
if(is_array($a)){
foreach ($a as $ib=>$b){
if(is_array($b)){
printout($b);
}
else{
if ($ib == 'name') {
$GLOBALS['all'] .= $ia;
echo '<tr>';
echo '<td>' . $b . ' (' . $ia . ')</td>';
echo '</tr>';
$GLOBALS['all'] = '';
}
}
}
}
}
}
*对不起,我的解释不好,希望你们能理解
解决方案
您可以使用以下功能:
function search(array $array, $name)
{
foreach ($array as $key => $entry) {
if ($entry['name'] === $name) {
return [$key];
}
if (isset($entry['sub']) && $found_keys = search($entry['sub'], $name)) {
return array_merge([$key], $found_keys);
}
}
return null;
}
它返回:
- 如果该值是直接找到的,则包含相关索引的数组,
- 如果它不是但在任何后代项目中找到,则将其索引与所述后代的索引合并的数组,
null
如果在树的那部分没有找到它。
注意:如果给定名称多次出现,它只会找到第一次出现。
推荐阅读
- python - 如何在批量 pytest 执行中使用对象的 __subclasses__() 方法?
- git - 用于在 GIT 上手动合并 2 个分支的 GUI
- c# - 错误 CS7036:没有给出与“Vector2.Vector2(float, float)”所需的形参“y”相对应的参数
- java - Elastic Search 和 Y10k(超过 4 位数的年份)
- javascript - VS Code 中的“找不到任务‘npm’”错误
- amazon-web-services - 每个子域的 AWS S3 静态网站存储桶路由
- r - 根据另一列的条件,对单个数据框列中的值进行 Wilcox 检验
- pandas - 绘制多列值的频率
- javascript - 为什么我的实时服务器不能在 Visual Studio 代码中工作?
- lua - 罗技 Lua 将 Rapid Fire 与喷雾相结合