PHP在数组中搜索数组并添加值
我有以下数组:PHP在数组中搜索数组并添加值,php,arrays,Php,Arrays,我有以下数组: Array $a ( [1] => Array ( [id] => 1 [name] => Shoes ) [2] => Array ( [id] => 2 [name] => Shirts ) [3] => Array ( [id] => 3 [name] => Jeans )
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]匹配。如果是这样,我想在$a内添加一个新值['hasID']=>true
解决方案应如下所示:
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;
}
}
}
这样不行。我试了好几个小时。有什么想法吗
多谢各位
在第一个数组中循环,并检查第二个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);
您的尝试无效,因为您使用double==而不是simple=作为值属性。这应该是有效的:
foreach($a as $ak => $av) {
foreach($b as $bk => $bv) {
if($bv == $ak['id']) {
$a[$ak]['hasID'] = true;
} else {
$a[$ak]['hasID'] = false;
}
}
}
但是,出于性能考虑,使用in_阵列的解决方案是更好的选择。
<?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>";
?>
您在那里实现了一些新手可能不理解的东西;参考资料&为什么==
无法解决=
@mackiee,我希望我解释了参考资料。谢谢你的提醒,哇!这很管用,又短又性感。我从参考操作符中学到了一些新东西。非常感谢!:)@PascalCloverfield将代码进一步缩减,并添加了一个array\u walk
版本。快乐编码:)
<?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>";
?>