我有2个数组
$array1 = array(22,193,124);
$array2 = array(array('id'=>22, 'count'=> 1), array('id'=>124, 'count'=>2));
现在,我需要在$ array2中搜索$ array1中的id,如果发现它可以增加计数值,还可以将未找到的计数添加为1的数组添加到数组中,这样我得到的数组就是
$arr = array(array('id'=>22, 'count'=> 2), array('id'=>124, 'count'=>3), array('id'=>193, 'count'=>1));
任何帮助将不胜感激
我尝试过的当前代码是
if($array2){
foreach($array1 as $array){
if(in_array($array, array_column($array2, 'id'))){
$wa_array['count'] += 1;
} else {
$wa_array['id'] = $array;
$wa_array['count'] = 1;
}
}
} else {
foreach($array1 as $array){
$wa_array['id'] = $array;
$wa_array['count'] = 1;
}
}
答案 0 :(得分:1)
这可能是您要寻找的东西-
$array1 = array(22,193,124);
$array2 = array(array('id'=>22, 'count'=> 1), array('id'=>124, 'count'=>2));
foreach($array1 as $key=>$digit)
{
$keyFound = array_search($digit, array_column($array2, 'id'));
if($keyFound === false)
{
array_push($array2, ['id'=>$digit, 'count'=>1]);
}
else
{
$array2[$keyFound]['count']++;
}
}
print_r($array2);
答案 1 :(得分:0)
这个问题不是很清楚,所以我会理解:您需要检查第一个数组中的值是否在第二个数组中。如果是,则增加第二个数组的计数值,否则,创建值为1的元素。
此代码未经测试,希望可以帮助您找到好的解决方案。
foreach($array1 as $value){
searchForId($value,$array2);
}
function searchForId($id, $array) {
foreach ($array as $key => $val) {
if ($val['id'] === $id) {
$val['count'] += 1;
}else{
array_push(array('id'=>$id,'count'=>1))
}
}
return null;
}
答案 2 :(得分:0)
您应该遍历$array2
,而不要遍历$array1
。在array_column($array2, 'id')
中找到值并不能告诉您要递增的数组元素的索引。
foreach ($array2 as &$item) {
if (in_array($item['id'], $array1)) {
$item['count']++;
}
}
请注意,您必须使用&$item
来引用原始数组元素,以便对其进行修改将更新$array2
。否则,$item
将是数组元素的副本。
如果$array1
大,最好将其转换为关联数组,以便您可以更有效地测试成员资格。
$array1_assoc = array_flip($array1);
然后循环中的测试变为:
if (isset($array1_assoc[$item['id']]) {
答案 3 :(得分:0)
选中此一项。注意:但这具有O(n ^ 2)的复杂度。
flatten