如何在php中获取深度未知的多维数组上每个数组的索引

时间:2018-12-08 13:08:43

标签: php arrays recursion multidimensional-array

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'] = '';
                        }
                    }
                }
            }
        }
    }

*抱歉,我的解释不好,希望大家能理解

1 个答案:

答案 0 :(得分:0)

您可以使用以下功能:

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