不知道为什么我不能这样做。我的json是:
[values] => Array
(
[0] => Array
(
[field] => id1
[value] => 985
)
[1] => Array
(
[field] => id2
[value] => 6395
)
[2] => Array
(
[field] => memo
[value] => abcde
)
我只想要id2的值
我试过了:
foreach ($json['values'] as $values) {
foreach ($json as $key=>$data) {
if ($data['field'] == 'id2') {
$result = $data['value'];
print '<br>value: '.$result;
}
}
}
感谢。我知道这应该相对简单,我确信我之前已经做到了这一点。
答案 0 :(得分:1)
在第一个$values
已经包含您正在寻找的确切数组之后,不需要内循环
foreach ($json['values'] as $values) // $values contain
{
if ($values['field'] == 'id2')
{
$result = $values['value'];
print '<br>value: '.$result;
}
}
答案 1 :(得分:0)
foreach ($json['values'] as $values) { //you're looping your first array, puttin each row in a variable $values
foreach ($values as $key=>$data) { //you're looping inside values taking the array index $key and the value inside that index $data
if ($key == 'id2') { //test if $key (index) is = to id2
print '<br>value: '.$value; // print the value inside that index
}
}
}
这只是一个解释,你的代码出了什么问题,但是@Pawel_W不需要第二个foreach循环你可以直接测试
if($values['field']=='id2'){ print $values['value'];}
答案 2 :(得分:0)
我认为你只需要使用array_search。 这是recursive array_search;
答案 3 :(得分:0)
假设可能有多个具有相同名称的字段,并且您希望它们都作为数组,这里是另一种选择:
array_filter(array_map(function($item) { return $item['field'] == 'id2' ? $item['value'] : null; }, $json['values']));
如果您的字段名称始终是唯一的,并且您只需要一个标量:
array_reduce($json['values'], function($current, $item) { return $item['field'] == 'id2' ? $item['value'] : $current; });
(请注意,这个并不理想,因为即使在第一个元素中找到匹配,它也会遍历所有数组)
并here's a gist同时使用此函数和函数形式+输出。