我有一个像这样的关联数组:我需要合并两个数组和最后一个小时额定值,我需要加上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 @这样不同,这样对您有帮助吗?
答案 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