Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.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_Multidimensional Array - Fatal编程技术网

Php 将多维关联数组与匹配的键值对组合

Php 将多维关联数组与匹配的键值对组合,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有两个多维数组,我想把这两个数组合并成一个,匹配created_date值,结果应该是这样的 排列 ( ) 下面的代码应该可以做到这一点 解决方案: $traffic = []; //... $source = []; // ... foreach($traffic as $key => $value) { if(isset($source[$key])) { $token = $source[$key]; foreach($token

我有两个多维数组,我想把这两个数组合并成一个,匹配created_date值,结果应该是这样的

排列 (

)

下面的代码应该可以做到这一点

解决方案:

$traffic = []; //...
$source = []; // ...

foreach($traffic as $key => $value)
{
    if(isset($source[$key]))
    {
        $token = $source[$key];
        foreach($token as $keyy => $valuee)
        {
            if(isset($traffic[$key][$keyy]))
            {
                // Collision handling, if any ...
                $traffic[$key][$keyy] = $valuee;
            }
            else $traffic[$key][$keyy] = $valuee;
        }
    }
}
Array
(
    [0] => Array
        (
            [id] => 1
            [visitors] => 310
            [pageviews] => 1333
            [created_date] => 2016-03-09
            [scount] => 368
        )

    [1] => Array
        (
            [id] => 2
            [visitors] => 374
            [pageviews] => 1010
            [created_date] => 2016-03-10
            [scount] => 550
        )

    [2] => Array
        (
            [id] => 3
            [visitors] => 143
            [pageviews] => 617
            [created_date] => 2016-03-11
            [scount] => 238
        )

)
您可以在此处进行测试:

这是您的解决方案:-

$arr1 = $arr1['traffic']; // assign key traffic record to array1
$arr2 = $arr2['source'];  // assign key source record to array2
$result = [];
foreach($arr1 as $key=>$value){     
    $result[$key] = $value;
    // find created_date in second array
    $keyOfSecondArr = array_search($value['created_date'], array_column($arr2, 'created_date'));
    $result[$key]['scount'] = $arr2[$keyOfSecondArr]['scount'];
}
echo '<pre>'; print_r($result);

created_date可以是多个,也可以不是??第二个foreach循环键和值变量的命名非常好。如果两个数组键都有一些更改,例如:0,1,2和1,2,3,则此代码将失败。它不会失败,它将按预期工作。OP希望根据它们的索引键进行合并,所以如果它们具有不同的索引键,则不应合并它们
# I split your array into 2 parts ($traffic = $your_array['traffic'])
$traffic = array(
  array(
    id => 1,
    visitors => 310,
    pageviews => 1333,
    created_date => '2016-03-09'
  ),
  array(
    id => 2,
    visitors => 374,
    pageviews => 1010,
    created_date => '2016-03-10'
  ),
  array(
    id => 3,
    visitors => 143,
    pageviews => 617,
    created_date => '2016-03-11'
  )
);

# I split your array into 2 parts ($source = $your_array['source'])
$source = array(
  array (
    created_date => '2016-03-09',
    scount => 368
  ),
  array (
    created_date => '2016-03-10',
    scount => 550
  ),
  array (
    created_date => '2016-03-11',
    scount => 238
  )
);

# copy the traffic array cause we want to merge the new data into it
$result = $traffic;

# loop over the traffic array
foreach ($traffic as $k => $t) {

  # loop over the source
  foreach ($source as $s) {

    # try to find a match
    if ($t['created_date'] === $s['created_date']) {

      # add data to result
      $result[$k]['scount'] = $s['scount'];

      # we exit the inner foreach-loop here as there is only 1 match
      break;
    }
  }
}

# print the result
echo '<pre>'; print_r($result); echo '</pre>';
Array
(
    [0] => Array
        (
            [id] => 1
            [visitors] => 310
            [pageviews] => 1333
            [created_date] => 2016-03-09
            [scount] => 368
        )

    [1] => Array
        (
            [id] => 2
            [visitors] => 374
            [pageviews] => 1010
            [created_date] => 2016-03-10
            [scount] => 550
        )

    [2] => Array
        (
            [id] => 3
            [visitors] => 143
            [pageviews] => 617
            [created_date] => 2016-03-11
            [scount] => 238
        )

)
$arr1 = $arr1['traffic']; // assign key traffic record to array1
$arr2 = $arr2['source'];  // assign key source record to array2
$result = [];
foreach($arr1 as $key=>$value){     
    $result[$key] = $value;
    // find created_date in second array
    $keyOfSecondArr = array_search($value['created_date'], array_column($arr2, 'created_date'));
    $result[$key]['scount'] = $arr2[$keyOfSecondArr]['scount'];
}
echo '<pre>'; print_r($result);
Array
(
    [0] => Array
        (
            [id] => 1
            [visitors] => 310
            [pageviews] => 1333
            [created_date] => 2016-03-09
            [scount] => 368
        )

    [1] => Array
        (
            [id] => 2
            [visitors] => 374
            [pageviews] => 1010
            [created_date] => 2016-03-10
            [scount] => 550
        )

    [2] => Array
        (
            [id] => 3
            [visitors] => 143
            [pageviews] => 617
            [created_date] => 2016-03-11
            [scount] => 238
        )

)