2

如何比较 2 个数组并推送新值。

可能是标题写错了,但我不知道该写什么,我希望它是好的。

这是我的第一个数组。它包含欧洲邮政编码以及邮政编码中有多少成员

Array1 称为 $Memcooltransactions

    Array ( 
[0] => Array ( [zipcode] => 1067 [city] => Copenhagen K [numberofuniqmembers] => 11 ) 
[1] => Array ( [zipcode] => 0100 [city] => Tórshavn [numberofuniqmembers] => 1 )
)

这是我的第二个数组。它还包含欧洲邮政编码以及邮政编码中有多少家餐馆

Array2 称为 $Rescooltransactions

Array ( 
[0] => Array ( [zipcode] => 1067 [city] => Copenhagen K [numberofuniqplaces] => 1) 
[1] => Array ( [zipcode] => 1074 [city] => København V [numberofuniqplaces] => 1 )
)

这是我将这些数组比较在一起的代码。

foreach ($Memcooltransactions as $key) 
{
    $uniqmember = $key['numberofuniqmembers'];

  foreach ($Rescooltransactions as $key2) 
  {
    $uniqres = $key2['numberofuniqspisesteder'];

    if($key['zipcode'] === $key2['zipcode'])
    {

        $samlet = $uniqmember/$uniqres;
        $sizeofuniqmem += $uniqmember;
        $sizeofuniqres += $uniqres;

        $array1[] = array(
        'zipcode' => $key['zipcode'],
        'city' => $key['city'],
        'numberofuniqmembers' => $uniqmember,
        'numberofuniqspisesteder' => $uniqres, 
        );  

    }
  }
}

我的输出。

Array (     [0] => Array ( [zipcode] => 1067 [city] => Copenhagen K [numberofuniqmembers] => 11 [numberofuniqplaces] => 1 ) 

当我试图将无法比较的值抓取到新数组中时,它会使网站崩溃。这就是我从上面的 foreach 中删除它的原因。但是如何在不使网站崩溃的情况下获得所需的输出?

期望的输出

 Array ( 
[0] => Array ( [zipcode] => 1067 [city] => Copenhagen K [numberofuniqmembers] => 11 [numberofuniqplaces] => 1 ) 
[1] => Array ( [zipcode] => 0100 [city] => Tórshavn [numberofuniqmembers] => 1 [numberofuniqplaces] => 0 )
[2] => Array ( [zipcode] => 1074 [city] => København V [numberofuniqmembers] => 0 [numberofuniqplaces] => 1 )
) 

希望你能帮忙:)

4

3 回答 3

1

您必须执行两个循环,第一个循环使用第一个数组中的数据初始化结果数组,第二个循环添加第二个数组中但不在第一个数组中的数据。

就像是:

$result = array();
// first loop, initialize $result
foreach ($Mem as $key) {
    $result[] = array(
        'zipcode' => $key['zipcode'],
        'city' => $key['city'],
        'numberofuniqmembers' => $key['numberofuniqmembers'],
        'numberofuniqplaces' => 0, 
    );  
}
$create = 1;
// second loop, complete $result
foreach ($Res as $key) {
    $uniqres = $key['numberofuniqplaces'];
    $i = 0;
    foreach ($result as $key2) {
        $uniqmember = $key2['numberofuniqmembers'];
        if($key['zipcode'] === $key2['zipcode']) {
            $result[$i] = array(
                'zipcode' => $key['zipcode'],
                'city' => $key['city'],
                'numberofuniqmembers' => $uniqmember,
                'numberofuniqplaces' => $uniqres, 
            );
            $create = 1;
            break; // <--- modified
        } elseif ($create) {
            $create = 0;
            $result[] = array(
                'zipcode' => $key['zipcode'],
                'city' => $key['city'],
                'numberofuniqmembers' => 0,
                'numberofuniqplaces' => $uniqres, 
            );  
        }
    }
    $i++;
}
print_r($result);

输出:

Array
(
    [0] => Array
        (
            [zipcode] => 1067
            [city] => Copenhagen K
            [numberofuniqmembers] => 11
            [numberofuniqplaces] => 1
        )

    [1] => Array
        (
            [zipcode] => 0100
            [city] => Tórshavn
            [numberofuniqmembers] => 1
            [numberofuniqplaces] => 0
        )

    [2] => Array
        (
            [zipcode] => 1074
            [city] => København V
            [numberofuniqmembers] => 0
            [numberofuniqplaces] => 1
        )

)
于 2013-03-19T14:05:06.610 回答
0

试试这个。它将两个数组合并到$newArray并且不包含重复项。

$newArray = Array();
foreach($arr1 as $k=>$val)
{
    if(array_key_exists($k, $arr2))
    {
        $newArray[$k] = array_merge($val, $arr2[$k]);
    }
}
于 2013-03-19T10:53:09.250 回答
0

晚了几分钟,但无论如何我都会发布这个,因为它是可扩展的。我做了一些假设:

  • 城市是独一无二的
  • 城市可以有多个邮政编码
  • 两个数组中的键integer相加
  • 否则价值$arr2优先

-

function mergeLocations($arr1, $arr2){
  $tmp = array(); $keys = array(); $ret = array();
  foreach($arr1 as $loc) 
    foreach($loc as $key => $val)
      if(isset($loc['city'])){
        if(!isset($tmp[$loc['city']]))
          $tmp[$loc['city']] = array();
        $tmp[$loc['city']][$key] = $val;
        $keys[] = $key;
      }
  foreach($arr2 as $loc) 
    foreach($loc as $key => $val)
        if(isset($loc['city'])){
          if(!isset($tmp[$loc['city']]))
            $tmp[$loc['city']] = array();
          $keys[] = $key; 
        }
  $keys = array_unique($keys);
  foreach($arr2 as $loc)
    foreach($loc as $key => $val)
      if(isset($loc['city']))
        if(!isset($tmp[$loc['city']][$key]) || !is_int($tmp[$loc['city']][$key]))
          $tmp[$loc['city']][$key] = $val;
        else 
          $tmp[$loc['city']][$key] += $val;
  foreach($tmp as $key => $loc){
    foreach($keys as $k)
      if(!isset($loc[$k]))
        $loc[$k] = 0;
    $ret[] = $loc;
  }
  return $ret; 
}

工作示例

于 2013-03-19T14:15:23.783 回答