PHP - 访问多维数组值

23
在经过几个小时的折腾、出汗和拔头发后,我仍然无法访问这些值。我想循环遍历第一层数组,基本的“foreach”循环已经足够简单了,但是我似乎无法获取第二个子数组中'['suitability']' 数组的值。我找了一下,但好像只能找到非常基础的数组教程,没有深入研究循环。

我正在尝试访问嵌套/子数组中的值,例如'['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
                        )
                )
       )
)

当你说“我不想使用关联键,因为排序有点问题”时,你的意思是什么? - Orangepill
1
欢迎来到 Stack Overflow。感谢您撰写如此详细和清晰的问题!+1。 - Shrey Gupta
4个回答

26

你可能遇到的问题是适用性(suitability)是一个数组的数组,而不仅仅是一个数组。因此,在想要获取第一二个顶层元素的species_name属性的示例中,你需要使用类似于以下的内容:

$array[1]["suitability"][0]["species_name"];
值得注意的是,你的第一个数组中没有包含“suitability”值,因此无法访问该值。在 foreach 循环中,你可以使用类似于以下结构的语句:

值得注意的是,你的第一个数组中没有包含“suitability”值,因此无法访问该值。在 foreach 循环中,你可以使用类似于以下结构的语句:

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

我只是在foreach循环外部计算数组的帖子数量,然后使用var_dump输出,但它不起作用。如果您不介意,这是我的脚本http://pastebin.com/jFxSkhzT。 - Freddy Sidauruk
你正在循环中每次都覆盖变量$kuantity。你可能看到的是最后一次迭代的值。 - Orangepill
修改为 $kuantity[] = count($_POST['quantity'][$key]); - Orangepill
它不起作用,我的格式看起来像上面的那样,这里是真实的格式 http://prnt.sc/cxq4gp - Freddy Sidauruk

2

要从多维数组中获取嵌套元素的值(可选择回退到默认值),您可以使用此数组库中的get方法

Arr::get($array, "$index1.suitability.$index2.species_name")

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

1

Iracicot的回答帮助我找到了使用RecursiveIterator类访问递归数组值的方法,如下所示。最终我的解决方案使用了更加实用的RecursiveIteratorIterator类,详情请参见http://php.net/manual/en/class.recursiveiteratoriterator.php。请注意,最终得到的是一个扁平化的数组,个人认为这样更易于处理。

<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>

1
你可以查看PHP:RecursiveArrayIterator类,它可以让你遍历多层嵌套的ArrayIterator。如果你没有使用任何ArrayIterator,那么你应该考虑尝试一下。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接