У меня был такой ассоциативный массив: мне нужно объединить два массива и последний рейтинг часов, мне нужно добавить hrrating1 =, рейтинг часов 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 @, как это любая помощь относительно ????
объедините все это и добавьте также hrRating - наконец, мне нужно получить один массив только с комбинацией hrrating
попробуйте функцию PHP array_merge
предоставьте образец вывода, чтобы лучше понять, что вы ищете
Разве нельзя сделать hrRating в виде массива ?? должно быть проще и лучше вместо нескольких ключей hrRating
Я согласен с @Yash, ведь может стоит превратить все свои свойства в массивы? Их среднее значение можно легко вычислить, и они лучше представляют основную структуру данных.
Взгляните dyn-web.com/php/arrays/combine.php






вы можете комбинировать массивы двумя способами:
$third_array = combine_array($array1,$array2);
а другой способ:
$array = $array1 + $array2;
измените $ array1 & $ array2 в соответствии с именами ваших массивов.
Вы можете использовать функцию слияния array_merge() для объединения массивов следующим образом:
$comined_array=array_merge($array1,$array2);
Теперь $combined_array будет содержать значение как $array1, так и $array2.
все два массива находятся в коллекции, так как разделить массив ???? и объединяем check $ get_skills --- два цикла зацикливаемся - придут два массива
приведенный выше массив, который вы опубликовали, я думаю, вам просто нужно нажать дополнительный ключ рейтинга в свой массив, поэтому вместо объединения массива вы можете просто вставить дополнительный ключ рейтинга в уже существующий массив с помощью PHP array_push () функция.
$array_2 = max($arra_1,$arra) ;
print_r ($ array_2);
Array ( [0] => Array ( [skillName] => JDK [comments] => [jobRating] => 2 [userRating] => 3 [skillGap] => -1 [hrRating] => 2 ) [1] => Array ( [skillName] => Java Servlets [comments] => [jobRating] => 4 [userRating] => 3 [skillGap] => 1 [hrRating] => 3 ) )
измените $ array_1 & $ array в соответствии с именами ваших массивов.
Вы ищете объединение массивов. Функция объединение массивов представляет собой массив ключей, а затем значений, тогда как объединение массивов добавляет массивы к первому.
Как упоминалось в других ответах, измените переменные массива, чтобы они соответствовали вашим собственным.
$array_1 = ['a'];
$array_2 = ['b'];
$new_array = array_merge($array_1, $array_2);
print_r($new_array);
// ['a', 'b']
Найдите больше функций массива здесь.
Вы можете попробовать любую из этих альтернатив: -
Предполагая, что оба массива имеют одинаковые элементы и ключи и назвали его как $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
)
)
не берите, это два массива - это коллекция, я только что распечатал массив коллекции
Обновлено (вход одиночного массива)
Я не знаю, могу ли я использовать 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;
}
не рассматривайте как два массива. это коллекция
Просто чтобы добавить разнообразия: вот еще один способ переупорядочить массив. Я взял на себя смелость объединить все массивы в один мастер-массив $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
Вы хотите объединить только поле hrRating всего массива?