我在这个数组和 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_export
比 print_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 information
、less holds less stuff
、id holds some id
等。您还可以调查其他array functions 以查看它们是否对您的目的有用。我对您的数据或提供更多信息的意图知之甚少。
我只是想使用一个 foreach 循环。这甚至可能吗?
在我的示例中,如果我的 foreach 中没有 [0],它就可以工作。一个多卷发设置,另一个只有两个卷发。但我使用的是多卷曲,我得到了两个数组。这就是为什么我试图只使用 foreach 来获取第一个数组,但我的 [0] 尝试不起作用
例如,如果我执行 `foreach($results as $result)echo $result['nonsense']['more'];它会给我一个值,但它会给我第二个数组的错误,因为我正在迭代两个数组。这就是为什么我试图只遍历我尝试使用 [0] 的第一个数组以上是关于我在这个数组和 foreach 上做错了啥?的主要内容,如果未能解决你的问题,请参考以下文章