PHP中的PHP搜索数组并添加值

时间:2014-04-17 13:04:15

标签: php arrays

我有以下数组:

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;
            }
        }
    }

那不行。我试过几个小时。有什么想法吗?

非常感谢!

此致

3 个答案:

答案 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);

Working Demo

原因:要直接修改数组,请使用引用运算符。

单行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>";
?>