如何将2个数组和组合用于相同的值?

时间:2018-02-13 22:04:57

标签: php

我需要组合两个多维数组才能生成单个合并数组。

数组1($array1)按键值'vo'排序。我需要将第二个数组($array2)附加到具有相同userID的第一个数组。

例如:

$array1 = array(
            1 => array(
                 'id' => 1,
                 'vo' => 1,
                 'userID' => 21
           ),
           2 => array(
                 'id' => 2,
                 'vo' => 2,
                 'userID' => 22
           ),
           3 => array(
                 'id' => 3,
                 'vo' => 3,
                 'userID' => 23
           ),
           4 => array(
                 'id' => 4,
                 'vo' => 5,
                 'userID' => 25
           )
           );

第二阵列:

$array2 = array(
          1 => array(
                'id' => 1,
                'userID' => 21
          ),
          2 => array(
                'id' => 2,
                'userID' => 21
          ),
          3 => array(
               'id' => 3,
               'userID' => 23
          )
          );

理想的解决方案:

$desired_solution = array(
          1 => array(
               'id' => 1,
               'vo' => 1,
               'userID' => 21
          ),
          2 => array(
               'id' => 1,
               'userID' => 21
          ),
          3 => array(
               'id' => 2,
               'userID' => 21
          ),
          4 => array(
               'id' => 2,
               'vo' => 2,
               'userID' => 22
          ),
          5 => array(
               'id' => 3,
               'vo' => 3,
               'userID' => 23
          ),
          6 => array(
               'id' => 3,
               'userID' => 23
          ),
          ...
    );

2 个答案:

答案 0 :(得分:1)

这是一种产生预期结果的方法。但是时间的复杂性并不适合这个。

 function search($array, $key, $value)
    {
        $results = array();

        if (is_array($array)) {
            if (isset($array[$key]) && $array[$key] == $value) {
                $results[] = $array;
            }

            foreach ($array as $subarray) {
                $results = array_merge($results, search($subarray, $key, $value));
            }
        }

        return $results;
    }

    $result = array();
    foreach($array1 as $arr){
        array_push($result, $arr);
        $id_to_search = $arr['userID'];
        $all_matched = search($array2, 'userID', $id_to_search);
        foreach($all_matched as $searched){
            array_push($result, $searched);
        }
    }

如果我们考虑一下排序的东西和阵列的其他方面,我们可以有更好的时间复杂度来产生预期的结果。尝试在代码上运行。

答案 1 :(得分:0)

最终结果将包含从0开始的键。

<?php
$merged = array_merge($array1, $array2);
usort($merged, 'my_cmp');

function my_cmp($a, $b)
{
    $diff = $a['userID'] - $b['userID'];
    if($diff == 0)
        $diff = $a['id'] - $b['id'];
    if($diff == 0)
        $diff = isset($b['vo']);

    return $diff;
}

在此处排序提示:How can I sort arrays and data in PHP?

值得自己动手去分类。