我在这个数组和 foreach 上做错了啥?

Posted

技术标签:

【中文标题】我在这个数组和 foreach 上做错了啥?【英文标题】:what am i doing wrong with this array and foreach?我在这个数组和 foreach 上做错了什么? 【发布时间】:2012-01-20 22:34:19 【问题描述】:

我有两个数组,我可以使用 $result[0] 或 $result[1] 获得。

我已经完成了print_r($results[0])print_r($result[1])。他们都给了我想要的两个不同的数组。

但是,如果我这样做,我将无法获得任何信息

foreach($results[0] as $result)
    echo $result['data']['id'];

我希望能够区分这两个数组,所以我希望能够从这两个数组中获取信息。

我也对 $results 进行了 json_decode。

如果有人可以在这里帮助我,那就太好了!谢谢

编辑:

Array
(
    [nonsense] => Array
        (
            [more] => information
            [less] => less stuff
        )


    [data] => Array
        (
            [0] => Array
                (
                    [id] => some id
                )
            [1] => Array
                (
                    [eh] => some eh
                )
        )
)

Array
(
    [more stuff] => Array
        (
            [more] => information
            [less] => less stuff
        )


    [more data] => Array
        (
            [0] => Array
                (
                    [freshstuff] => some id
                )
        )

)

【问题讨论】:

我想你可能想显示你的数组的结果? 也许你可以展示这两个数组结构? print_r($result[0])foreach($results[0].. 结果s 还是结果?可能是错字? 我已经添加了数组并更正了结果问题。谢谢 var_exportprint_r 更有用,因为它会生成 php 可解析的数组表示形式。 【参考方案1】:

在您的示例中,$result['data']['id'] 不存在。 id 还在 另一个 数组中。

foreach 在这种情况下没有用,因为数据不统一。当您遍历$results[0] 时,您会在第一次迭代中获得nonsense 键,在第二次迭代中获得data 键。此外,nonsense 键是键/值对数组,而data 键是键/值对数组。

$results[0]$results[1] 看起来一致,但它们包含不同的键。

echo $results[0]['data'][0]['id'], "<br>\n";
echo $results[0]['data'][1]['eh'], "<br>\n";

echo $results[1]['more data'][0]['freshstuff'], "<br>\n";

更新

foreach() 不适用于这种数组。在这种情况下,array_walk_recurisive() 通常是一个不错的选择。

<pre>
<?php

$results = array(
  array(
    'nonsense' => array(
      'more' => 'information',
      'less' => 'less stuff'
    ),


    'data' => array(
      array('id' => 'some id'),
      array('eh' => 'some eh')
    )
  ),

  array(
    'more stuff' => array(
      'more' => 'information',
      'less' => 'less stuff'
    ),


    'more data' => array(
      array('freshstuff' => 'some id'))

  )
);


function test_print($item, $key)

    echo "$key: $item\n";


array_walk_recursive($results, 'test_print');

?>
</pre>

展示

more: information
less: less stuff
id: some id
eh: some eh
more: information
less: less stuff
freshstuff: some id

根据您的需要,您可能还会发现其他一些 array functions 有用。

【讨论】:

所以我不能做一个 foreach 来迭代所有数据?我不想输入 [0]... [1].... [2].... 等等如果我从 foreach 中删除 [0],我可以得到输出 array_walk_recursive 的示例代码将带您进入$results 中最内部的数据。它打印more holds informationless holds less stuffid holds some id 等。您还可以调查其他array functions 以查看它们是否对您的目的有用。我对您的数据或提供更多信息的意图知之甚少。 我只是想使用一个 foreach 循环。这甚至可能吗? 在我的示例中,如果我的 foreach 中没有 [0],它就可以工作。一个多卷发设置,另一个只有两个卷发。但我使用的是多卷曲,我得到了两个数组。这就是为什么我试图只使用 foreach 来获取第一个数组,但我的 [0] 尝试不起作用 例如,如果我执行 `foreach($results as $result)echo $result['nonsense']['more'];它会给我一个值,但它会给我第二个数组的错误,因为我正在迭代两个数组。这就是为什么我试图只遍历我尝试使用 [0] 的第一个数组

以上是关于我在这个数组和 foreach 上做错了啥?的主要内容,如果未能解决你的问题,请参考以下文章

我究竟做错了啥?角垫形式场

我在处理这个 Scala 集合时做错了啥?

我在这个 PLSQL 函数中做错了啥?

我的代码看起来很完美,但显示错误的输出。有人可以帮我我在这里做错了啥吗?

mysql变量有问题,我在这里做错了啥?

Java 使用数组比 C++ 中的 std::vector 快 8 倍。我做错了啥?