Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从另一个数组递增一个数组的值_Php_Arrays - Fatal编程技术网

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中,则增加计数。