【问题标题】:PHP - Accessing Multidimensional Array ValuesPHP - 访问多维数组值
【发布时间】:2013-06-12 22:20:18
【问题描述】:

经过几个小时的混乱、出汗和拔头发后,我仍然无法访问这些值。我想遍历第一级数组,这很简单,有一个基本的“foreach”循环,但我似乎无法进入第二个子数组上的“['合适性']”数组。我环顾四周,但除了似乎没有深入研究循环的真正基本数组教程之外似乎什么都没有。

我正在尝试访问嵌套/子数组中的值,即'['Species_name']'。

我不想使用关联键,因为排序有点问题。

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => Bradeley Hall Pool
            [postcode] => CW1 5QN
            [lat] => 53.10213
            [lon] => -2.41069
            [size] => 1.60
            [pegs] => 21
            [distance] => 26.6
        )

    [1] => Array
        (
            [id] => 2
            [name] => Farm Pool
            [postcode] => CW9 6JQ
            [lat] => 53.320502
            [lon] => -2.549049
            [size] => 0.88
            [pegs] => 8
            [distance] => 15.4
            [suitability] => Array
                (
                    [0] => Array
                        (
                            [fk_water_id] => 2
                            [fk_species_id] => 4
                            [species_name] => Barbel
                            [species_rating] => 1
                            [record_id] => 1
                            [weight_kg] => 2.721554
                            [length_cm] => 40
                            [height_cm] => 30
                        )
                )
       )
)

【问题讨论】:

  • 你说“我不想使用关联键,因为排序有点问题”是什么意思。
  • 欢迎来到 Stack Overflow。感谢您写出如此详尽而详细的问题! +1。

标签: php arrays multidimensional-array


【解决方案1】:

可能会让您感到困惑的是,适用性是一个数组数组,而不仅仅是一个数组,因此在一个示例中,您想要获取第一个第二个顶级元素的 species_name 属性,您可以使用类似

$array[1]["suitability"][0]["species_name"];

值得注意的是,您的第一个数组不包含“适用性”值,因此无法访问。在 foreach 循环中,您可以使用类似于以下的构造:

foreach($array as $value){
    if (isset($value["suitability"])){
        echo $value["suitability"][0]["species_name"];
    }
}

【讨论】:

  • 我只计算里面的数组帖子然后 var_dump 在 foreach 外面,但它不起作用,如果你不介意这里是我的脚本pastebin.com/jFxSkhzT
  • 您在循环中的每次迭代都覆盖了变量 $kuantity。您可能看到的是最后一次迭代的值。
  • 更改为$kuantity[] = count($_POST['quantity'][$key]);
  • 不行,我的格式如上,这里是真正的格式prnt.sc/cxq4gp
【解决方案2】:

你可以看看PHP: RecursiveArrayIterator class

这允许您迭代多个嵌套的 ArrayIterator。如果您没有使用任何 ArrayIterator,那么您应该考虑尝试一下。

【讨论】:

    【解决方案3】:

    Iracicot 的回答帮助我找到了使用 RecursiveIterator 类访问递归数组值的方法,如下所示。根据http://php.net/manual/en/class.recursiveiteratoriterator.php,我的解决方案最终使用了更有用的 RecursiveIteratorIterator 类。请记住一个非常有用的事实,即最终产品是一个扁平阵列,我个人发现它更容易使用。

    <table style="border:2px;">
      <tr>
        <th>Time</th>
        <th>Service Number</th>
        <th>Destination</th>
      </tr>
    <?php 
    foreach($stops as $buses){
           $iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($buses));
           $bus = (iterator_to_array($iterator,true)); 
           print('<tr><td>'.$bus['AimedDepartureTime'].'</td><td>'.$bus['PublishedLineName'].'</td><td>'.$bus['DirectionName'].'</td></tr>');
    }
    ?>
    </table>
    

    【讨论】:

      【解决方案4】:

      要从多维数组中获取嵌套元素值(可选回退到默认值),您可以使用来自this array libraryget method

      Arr::get($array, "$index1.suitability.$index2.species_name")
      
      // Or using array of keys
      Arr::get($array, [$index1, 'suitability', $index2, 'species_name'])
      

      【讨论】:

        猜你喜欢
        • 2013-09-01
        • 2012-05-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-25
        • 1970-01-01
        相关资源
        最近更新 更多