【问题标题】:PHP How to access all elements of multidimensional array if no indexes are known?PHP 如果不知道索引,如何访问多维数组的所有元素?
【发布时间】:2011-10-13 01:53:47
【问题描述】:

我在Determining what classes are defined in a PHP class file 使用了代码的修改版本,从特定的文件列表创建了类和函数的多维数组。我最终得到的是这个(我知道名称搞砸了,但我跑题了,不得不返回并更改 3 个不同文件中的类名和函数名,所以让我们假设这些是合法的类名和函数名),

Array
(
    [0] => Array
        (
            [namethis_whatever_I_want] => Array
                (
                    [0] => another_function
                    [1] => whatever_function
                )

        )

    [1] => Array
        (
            [tc_class_simplevar] => Array
                (
                    [0] => set_var_test
                    [1] => get_var_test
                )

        )

    [2] => Array
        (
            [another_freekin_class] => Array
                (
                    [0] => some_function
                    [1] => another_crazy_function
                )

        )

)

所以现在我需要能够访问每个类下的类名和函数名,而不知道它们中的任何一个的索引是什么。我已经尝试过 for 循环、foreach,并使用像 $i 和 $ii 这样的计数器通过数字索引来访问它们,但我尝试的任何尝试都不会打印出除了垃圾或错误之外的任何内容。

我在想像嵌入式 foreach 语句之类的东西

$i = 0; 
foreach($array as $class){
  echo $class[$i];
  $ii = 0; 
  foreach($class as $val){
  echo $val[$ii];
  $ii++;
  }
$i++;
}

但运气不好。

还试图访问 $array[$i][$i];或 $array[$i][$ii];抛出错误 bad offset 0

我确信类数组索引实际上被命名为类名会有问题,但我想我仍然可以使用数字索引。

基本上,我对如何访问数据以及如何使用正确的方向感到完全困惑。

我需要能够获取一个类名,然后获取该类下的所有函数名,并且需要能够通过从数组中检索它们在整个程序的不同点访问它们。

谢谢

我讨厌在向他人寻求帮助后几分钟就回答自己的问题。我觉得我好像在浪费你的时间。

你们对 foreach 的看法是对的,但这是一个棘手的问题。提出这个问题有助于让我自己了解我需要找到的东西,让我明白问题出在哪里。

这个数组有 3 层。有一个包含 3 个数组的数组,每个数组都有一个字符串而不是数字作为它的索引。它们中的每一个都包含自己的元素。

所以我必须遍历数组 1、2、3 来获取它们每个元素的字符串索引,然后使用该字符串元素和数字元素来获取最内部数组的内部元素。好的,这让我感到困惑,但这是对我有用的代码,使用 echo 和一些轻微的格式,所以我可以看到它工作。

$size = sizeof($objectList);
for($i = 0; $i < $size; $i++){
    foreach($objectList[$i] as $key => $val){
        $className = $key;
        echo $className . ": <br/>";
        foreach($objectList[$i][$className] as $val){
            $functionName = $val;
            echo $functionName . " , ";
        }
    echo "<br/><br/>";
    }
}

导致

namethis_whatever_I_want: 另一个函数,任何函数,

tc_class_simplevar: set_var_test , get_var_test ,

another_freekin_class: 一些函数,另一个疯狂函数,

如果对其他人有帮助,这里的 Marks 版本与我的数组和变量名称进行比较。我会说这种方式是最干净的,它会减少几行代码。

foreach($objectList as $objects){
    foreach($objects as $classname => $functions){
        $cn = $classname;
        foreach($functions as $functionname){
            $fn = $functionname;
        }
    }
}

感谢您的帮助:-)

【问题讨论】:

    标签: php multidimensional-array foreach


    【解决方案1】:

    foreach 还允许您指定迭代器的关键部分,因此您可以循环遍历关联数组:

    foreach($array as $key => $val){
        echo $array[$key]; // prints $val
    }
    

    所以,在你的情况下:

    foreach($rootarray as $classarray){
        foreach($classarray as $classname => $functions){
            // $classname contains the name of the class
            foreach($functions as $functionname){
                // $functionname contains the name of the function
            }
        }
    }
    

    【讨论】:

    • 谢谢马克,我编辑了我的问题以显示我在哪里找到了它,但基本上我最终得到了类似于你只在外面使用 for 循环的东西。我将尝试使用 3 个 foreach 循环,因为这看起来比我拥有的要好得多。
    • 太棒了!谢谢!你的方法效果很好,看起来比我的好。暂时被一个小错误弄糊涂了,在第二个 foreach 中,“$classarray”应该是第一个的 $val。但是非常感谢您的出色贡献:-)
    【解决方案2】:

    foreach是你的朋友:

    foreach($array as $key => $value) echo('$array['.$key.'] = '.$value);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-15
      • 2012-05-16
      • 2013-11-08
      • 2015-07-05
      • 2012-08-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多