Объедините два массива и получите новый

У меня был такой ассоциативный массив: мне нужно объединить два массива и последний рейтинг часов, мне нужно добавить 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 всего массива?

Ankita Mehta 01.08.2018 07:15

объедините все это и добавьте также hrRating - наконец, мне нужно получить один массив только с комбинацией hrrating

Sivaraju Mani 01.08.2018 07:16

попробуйте функцию PHP array_merge

Ts8060 01.08.2018 07:18

предоставьте образец вывода, чтобы лучше понять, что вы ищете

Yash Parekh 01.08.2018 07:20

Разве нельзя сделать hrRating в виде массива ?? должно быть проще и лучше вместо нескольких ключей hrRating

Yash Parekh 01.08.2018 07:40

Я согласен с @Yash, ведь может стоит превратить все свои свойства в массивы? Их среднее значение можно легко вычислить, и они лучше представляют основную структуру данных.

Carsten Massmann 01.08.2018 08:22

Взгляните dyn-web.com/php/arrays/combine.php

Ahmed_Ali 01.08.2018 08:53
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
7
100
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

вы можете комбинировать массивы двумя способами:

$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 --- два цикла зацикливаемся - придут два массива

Sivaraju Mani 01.08.2018 07:58

приведенный выше массив, который вы опубликовали, я думаю, вам просто нужно нажать дополнительный ключ рейтинга в свой массив, поэтому вместо объединения массива вы можете просто вставить дополнительный ключ рейтинга в уже существующий массив с помощью PHP array_push () функция.

Ankur Tailang 01.08.2018 08:15
$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 в соответствии с именами ваших массивов.

Suresh Kumar Kumawat 01.08.2018 08:26

Вы ищете объединение массивов. Функция объединение массивов представляет собой массив ключей, а затем значений, тогда как объединение массивов добавляет массивы к первому.

Как упоминалось в других ответах, измените переменные массива, чтобы они соответствовали вашим собственным.

$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
        )
)

не берите, это два массива - это коллекция, я только что распечатал массив коллекции

Sivaraju Mani 01.08.2018 09:31
Ответ принят как подходящий

Обновлено (вход одиночного массива)
Я не знаю, могу ли я использовать 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;
}

не рассматривайте как два массива. это коллекция

Sivaraju Mani 01.08.2018 09:40

Просто чтобы добавить разнообразия: вот еще один способ переупорядочить массив. Я взял на себя смелость объединить все массивы в один мастер-массив $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

Другие вопросы по теме