我在数组中搜索已知值wid
来获取密钥,然后这将帮助我获得cid
值。
$proximity = array(
'0' => array ('wid' => 4, 'cid' => 100),
'1' => array ('wid' => 1, 'cid' => 50),
'3' => array ('wid' => 2, 'cid' => 50)
);
$key = array_search(2, array_column($proximity, 'wid'));
print_r($key);
print_r($proximity[$key]['cid']);
当我搜索wid
4
和1
时,一切都很有效。
但是当我搜索wid: 2
时,我会Undefined offset: 2
。
为什么会发生这种情况,我该如何解决?
答案 0 :(得分:1)
Array_column返回字段的值,就像通常的索引数组一样,即使源数组是关联的。因此,只有当源数组没有省略索引时,返回的键才是正确的,并且您的搜索实际上在数组中获得“位置”。
例如,对于这样的数组
$proximity = array(
'a' => array ('wid' => 4, 'cid' => 100),
'b' => array ('wid' => 1, 'cid' => 50),
'c' => array ('wid' => 2, 'cid' => 50)
);
array_column将返回
Array
(
[0] => 4
[1] => 1
[2] => 2
)
如果您真的想要搜索array_column,要解决此问题并通过该“位置”获取项目,请使用
print_r(array_slice($proximity, $key, 1)['cid']);
或
print_r(array_values($proximity)[$key]['cid']);
答案 1 :(得分:0)
这是因为当你在做array_search()时它只搜索数组的第一级,你可以搜索如下:
<?php
echo 'hello world';
$proximity = array(
'0' => array ('wid' => 4, 'cid' => 100),
'1' => array ('wid' => 1, 'cid' => 50),
'3' => array ('wid' => 2, 'cid' => 50)
);
foreach($proximity as $subarray){
$key = array_search(2, array_column($subarray, 'wid'));
echo print_r($key) . '<br />';
echo print_r($proximity[$key]['cid']) . '<br />';
}
?>
这将搜索主数组中的每个子数组,这意味着$ proximity附近有多少元素并不重要,它将搜索所有这些元素。
答案 2 :(得分:0)
array_column()
正在破坏原始密钥。我不认为使用一个休息循环有任何耻辱。这是干净而快速的,键中的间隙没有麻烦;实际上,如果您需要,您的原始密钥将被保留。
代码:(演示:https://3v4l.org/8XWcf)
$proximity = array(
'0' => array ('wid' => 4, 'cid' => 100),
'1' => array ('wid' => 1, 'cid' => 50),
'3' => array ('wid' => 2, 'cid' => 50)
);
$wid=2;
foreach($proximity as $i=>$a){
if($a['wid']==$wid){
echo "i=$i and cid={$a['cid']}";
break;
}
}
输出:
i=3 and cid=50
如果您不希望控制结构作为迭代器,这似乎是一个明智的选择:
$wid=2;
$proximity=array_column($proximity,NULL,'wid');
if(isset($proximity[$wid])){
echo "cid={$proximity[$wid]['cid']}";
}else{
echo 'wid not found';
}
这假设wid
值是唯一的,并使用这些值作为子数组的键。演示:https://3v4l.org/Ph1tH