我有以下数组:
Array $a
(
[1] => Array
(
[id] => 1
[name] => Shoes
)
[2] => Array
(
[id] => 2
[name] => Shirts
)
[3] => Array
(
[id] => 3
[name] => Jeans
)
)
我有这个阵列:
Array $b
(
[0] => [1]
[1] => [5]
[2] => [6]
)
现在我想知道,如果$ b的一个值与$ a中的[id]匹配。如果是这样,我想添加一个新值[' hasID'] =>在$ a。中真实。
解决方案应如下所示:
Array $a
(
[1] => Array
(
[id] => 1
[name] => Shoes
[hasID] => true
)
[2] => Array
(
[id] => 2
[name] => Shirts
[hasID] => false
)
[3] => Array
(
[id] => 3
[name] => Jeans
[hasID] => false
)
)
我的尝试是这样的:
foreach($a as $ak => $av) {
foreach($b as $bk => $bv) {
if($bv == $ak['id']) {
$a[$ak]['hasID'] == true;
} else {
$a[$ak]['hasID'] == false;
}
}
}
那不行。我试过几个小时。有什么想法吗?
非常感谢!
此致
答案 0 :(得分:2)
循环遍历第一个数组,并检查第二个ID数组下是否存在$arr['id']
的值。如果找到,请将标志添加为true或1,否则为false或0。
foreach($arr1 as $k=>&$arr) //<--- As you can see I have added & (Reason below)
{
in_array($arr['id'],$arr2) ? $arr['hasID']= true : $arr['hasID']=false;
}
print_r($arr1);
原因:要直接修改数组,请使用引用运算符。
array_walk()
array_walk($arr1,function (&$v,$k) use($arr2){ in_array($v['id'],$arr2)? $v['hasID']=true : $v['hasID']=false; });
答案 1 :(得分:0)
您的尝试无效,因为您使用double ==而不是simple = for value attributes。这应该有效:
foreach($a as $ak => $av) {
foreach($b as $bk => $bv) {
if($bv == $ak['id']) {
$a[$ak]['hasID'] = true;
} else {
$a[$ak]['hasID'] = false;
}
}
}
然而,出于性能原因,使用in_array的解决方案是更好的选择。
答案 2 :(得分:0)
<?php
$arr1 = array('1'=>'shoes','2'=>'shirts','3'=>'jeans');
$arr2 = array('0'=>'1','1'=>'5','2'=>'6');
$i = 0;
foreach($arr1 as $k=>$val)
{
if($arr2[$i] == 1)
{
$ARR[$k][] = $k;
$ARR[$k][] = $val;
$ARR[$k][] = 'true';
}
else
{
$ARR[$k][] = $k;
$ARR[$k][] = $val;
$ARR[$k][] = 'false';
}
$i++;
}
echo "<pre>";
print_r($ARR);
echo "</pre>";
?>