Php 从另一个数组递增一个数组的值
我有两个数组Php 从另一个数组递增一个数组的值,php,arrays,Php,Arrays,我有两个数组 $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), arra
$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;
}
}
问题不太清楚,所以我将继续我的理解:您需要检查第一个数组中的值是否在第二个数组中。如果是,则增加第二个数组的计数值,如果不是,则使用值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;
}
您应该循环使用$array2,而不是$array1。在array_列$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']]) {
这可能是你正在寻找的东西-
$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);
看看这个。注意:但这具有^2复杂性
$array1 = [22,193,124];
$array2 = [['id'=>22, 'count'=> 1], ['id'=>124, 'count'=>2]];
foreach ($array1 as $value) {
$isFound = false;
foreach ($array2 as &$item) {
if ($value == $item['id']) {
$item['count']++;
$isFound = true;
continue;
}
}
if ($isFound == false) {
$array2 [] = ['id'=>$value, 'count'=> 1];
}
}
var_dump($array2);
这不是有效的PHP代码。为什么?它是有效的。您需要删除数组关键字或将[and]替换为and。StackOverflow不是免费的编码服务。所以我希望你能。请更新您的问题,以显示您已在某个应用程序中尝试过的内容。有关更多信息,请参阅,并采用:提示:使用For循环迭代$array1,使用in_数组测试id是否在$array1中,如果在$array1中,则增加计数。