首页 > 解决方案 > 如何在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'] = '';
                        }
                    }
                }
            }
        }
    }

*对不起,我的解释不好,希望你们能理解

标签: phparraysrecursionmultidimensional-array

解决方案


您可以使用以下功能:

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如果在树的那部分没有找到它。

注意:如果给定名称多次出现,它只会找到第一次出现。

演示:https ://3v4l.org/1hGr1


推荐阅读