从另一个数组递增一个数组的值

时间:2018-08-24 18:41:26

标签: php arrays

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

4 个答案:

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