结合两个数组并得到新的

时间:2018-08-01 05:09:19

标签: php arrays laravel

我有一个像这样的关联数组:我需要合并两个数组和最后一个小时额定值,我需要加上hrrating1 =,hr额定2 =这样

 array (
  0 => 
  array (
    'skill_name' => 'JDK (Java Development Kit)',
    'desc' => '',
    'req_rating' => '2',
    'user_rating' => '3',
    'hrRating' => '2',
  ),
  1 => 
  array (
    'skill_name' => 'Java Servlets',
    'desc' => '',
    'req_rating' => '4',
    'user_rating' => '3',
    'hrRating' => '3',
  ),
  2 => 
  array (
    'skill_name' => 'JDK (Java Development Kit)',
    'desc' => '',
    'req_rating' => '2',
    'user_rating' => '3',
    'hrRating' => '2',
  ),
  3 => 
  array (
    'skill_name' => 'Java Servlets',
    'desc' => '',
    'req_rating' => '4',
    'user_rating' => '3',
    'hrRating' => '4',
  ),
)  

所需的输出:

array (
          0 => 
          array (
            'skillName' => 'JDK',
            'comments' => '',
            'jobRating' => '2',
            'userRating' => '3',
            'skillGap' => '-1',
            'hrRating1' => '7',
            'hrRating2' => '2',

          ),
          1 => 
          array (
            'skillName' => 'Java Servlets',
            'comments' =>'',
            'jobRating' =>'4',
            'userRating' =>'3',
            'skillGap' => '1',
            'hrRating1' => '2',
            'hrRating2' => '3',

          ),
        ) 

我需要将两个数组与最后一列hrRating结合起来,应该像hrRating1和hrrating @这样不同,这样对您有帮助吗?

7 个答案:

答案 0 :(得分:1)

已更新(单数组输入)
我不知道是否可以将skill_name用作数组键(可能不能),因此不能使用$tmp_skill$tmp_index

function process_collection($data) {

    $tmp_skill = [];
    $tmp_index = [];
    $result = [];
    foreach ($data as $k => $item) {
        $skill = $item['skill_name'];
        echo $skill.'<br>';
        $idx = array_search($skill, $tmp_skill);
        if ($idx === false) {
            //$result[$idx]['_ratings'] = $item['hrRating'];
            //continue;
            $idx = count($tmp_skill);
            $tmp_index[] = $idx;
            $tmp_skill[] = $skill;
            $result[$idx] = $item;
            $result[$idx]['_ratings'] = [];
        }
        $result[$idx]['_ratings'][] = $item['hrRating'];
    }  

    // conversion array of ratings to individual values 'hrRating1', 'hrRating2', ...
    foreach($result as &$item) {
        $i = 0;
        foreach( $item['_ratings'] as $rate)
            $item['hrRating' . (++$i)] = $rate;
        unset($item['_ratings']);
        unset($item['hrRating']);
    }
    return $result;
}

答案 1 :(得分:0)

您可以通过两种方式组合数组:

r''

另一种方法是:

$third_array = combine_array($array1,$array2);

根据您的数组名称更改$ array1和$ array2。

答案 2 :(得分:0)

您可以使用array_merge()合并功能来组合数组,如下所示:

$comined_array=array_merge($array1,$array2);

现在$combined_array将包含$array1$array2的值。

答案 3 :(得分:0)

   $query = ['_id' => new MongoDB\BSON\ObjectID($this->id), 
            'StopsDetails' => ];

    try 
    {
        $cursor = $this->collection->find($query);
    } 
    catch (Exception $e) 
    {

    }
    return $cursor->toArray();

print_r($ array_2);

$array_2    = max($arra_1,$arra)    ;

答案 4 :(得分:0)

您要寻找的是array merge。函数array combine是一个键数组,然后是值,而数组合并将数组附加到第一个数组上。

如其他答案所述,更改数组变量以匹配您自己的变量。

$array_1 = ['a'];
$array_2 = ['b'];

$new_array = array_merge($array_1, $array_2);

print_r($new_array);
// ['a', 'b']

找到更多的数组函数here

答案 5 :(得分:0)

您可以尝试以下任何一种方法:-
假定数组的两个元素和键都相同,并将其命名为$arr1$arr2
备选方案1:-将所有hrRating组成一个数组并将其分配给主数组

foreach ($arr1 as $key => $data) {
    $arr1[$key]['hrRating'] = array($data['hrRating'], $arr2[$key]['hrRating']);
}
print_r($arr1);

输出:-

Array
(
    [0] => Array
        (
            [skillName] => JDK
            [comments] => 
            [jobRating] => 2
            [userRating] => 3
            [skillGap] => -1
            [hrRating] => Array
                (
                    [0] => 2
                    [1] => 7
                )
        )
    [1] => Array
        (
            [skillName] => Java Servlets
            [comments] => 
            [jobRating] => 4
            [userRating] => 3
            [skillGap] => 1
            [hrRating] => Array
                (
                    [0] => 3
                    [1] => 2
                )
        )
)

替代2:-使用新的序列键为不同数组中的每个hrRating值分配

foreach ($arr1 as $key => $data) {
    unset($arr1[$key]['hrRating']);
    $arr1[$key]['hrRating1'] = $data['hrRating'];
    $arr1[$key]['hrRating2'] = $arr2[$key]['hrRating'];
}
print_r($arr1);

输出:-

Array
(
    [0] => Array
        (
            [skillName] => JDK
            [comments] => 
            [jobRating] => 2
            [userRating] => 3
            [skillGap] => -1
            [hrRating1] => 2
            [hrRating2] => 7
        )
    [1] => Array
        (
            [skillName] => Java Servlets
            [comments] => 
            [jobRating] => 4
            [userRating] => 3
            [skillGap] => 1
            [hrRating1] => 3
            [hrRating2] => 2
        )
)

答案 6 :(得分:0)

只需添加一下即可:这是重新排列数组的另一种方法。我自由地将所有数组组合成一个主数组$in。通过执行一系列foreach的调用,您将很快获得结果。

我还添加了一个功能,即我将各自的评分数组命名为skill_name。如果您不喜欢,只需将下面的行注释掉:

// $j=$aa['skillName'];unset($aa['skillName']);

这是我用于测试的输入数据:

$in=array(
  array (
      array (
    'skillName' => 'JDK',
    'comments' => '',
    'jobRating' => '2',
    'userRating' => '3',
    'skillGap' => '-1',
    'hrRating' => '2',
   ), array (
    'skillName' => 'Java Servlets',
    'comments' =>'',
    'jobRating' =>'4',
    'userRating' =>'3',
    'skillGap' => '1',
    'hrRating' => '3',
   ),
  ), 
  array (
      array (
    'skillName' => 'JDK',
    'comments' => '',
    'jobRating' => '2',
    'userRating' => '3',
    'skillGap' => '-1',
    'hrRating' => '7',
   ), array (
    'skillName' => 'Java Servlets',
    'comments' =>'',
    'jobRating' =>'4',
    'userRating' =>'3',
    'skillGap' => '1',
    'hrRating' => '2',
   )
  ), 
  array (
      array (
    'skillName' => 'JDK',
    'comments' => 'not bad',
    'jobRating' => '3',
    'userRating' => '3',
    'skillGap' => '-1',
    'hrRating' => '4',
  ),  array (
    'skillName' => 'Java Servlets',
    'comments' =>'',
    'jobRating' =>'8',
    'userRating' =>'3',
    'skillGap' => '1',
    'hrRating' => '1',
  ),
));

这是重新排列的完整代码:

foreach ($in as $i => $na) foreach($na as $j => $aa) {
  $j=$aa['skillName'];unset($aa['skillName']);
  foreach ($aa as $k => $v) $ret[$j][$k][]=$v;
}

print_r($ret);

这就是我得到的输出:

Array
(
    [JDK] => Array
        (
            [comments] => Array
                (
                    [0] => 
                    [1] => 
                    [2] => not bad
                )

            [jobRating] => Array
                (
                    [0] => 2
                    [1] => 2
                    [2] => 3
                )

            [userRating] => Array
                (
                    [0] => 3
                    [1] => 3
                    [2] => 3
                )

            [skillGap] => Array
                (
                    [0] => -1
                    [1] => -1
                    [2] => -1
                )

            [hrRating] => Array
                (
                    [0] => 2
                    [1] => 7
                    [2] => 4
                )

        )

    [Java Servlets] => Array
        (
            [comments] => Array
                (
                    [0] => 
                    [1] => 
                    [2] => 
                )

            [jobRating] => Array
                (
                    [0] => 4
                    [1] => 4
                    [2] => 8
                )

            [userRating] => Array
                (
                    [0] => 3
                    [1] => 3
                    [2] => 3
                )

            [skillGap] => Array
                (
                    [0] => 1
                    [1] => 1
                    [2] => 1
                )

            [hrRating] => Array
                (
                    [0] => 3
                    [1] => 2
                    [2] => 1
                )

        )

)

在此处查看演示:http://rextester.com/WEUQ12234