Создание многомерного массива из двух массивов

У меня есть следующие 2 массива:

 Array 1
(
    [0] => Speed
    [1] => Grade
    [2] => Speed
    [3] => Grade
    [4] => Speed
    [5] => Grade
    [6] => Grade
    [7] => Speed
    [8] => Size
)

Array 2
(
    [0] => 5200 rpm
    [1] => Red
    [2] => 7200 rpm
    [3] => Blue
    [4] => 8900 rpm
    [5] => Green
    [6] => Purple
    [7] => 10000 rpm
    [8] => Big
)

Значения совпадают друг с другом. Например: Скорость — 5200 об/мин , Класс — красный и т. д.

Мне нужно сделать вышеописанное следующим образом:

$collection = array( 

        "Speed" => array (
           5200 rpm,
           7200 rpm,    
           8900 rpm,
           10000 rpm
        ),

        "Grade" => array (
           Red,
           Blue,
           Green,
           Purple
        ),

        "Size" => array (
           Big
        )
     );

Нужно сделать массив для каждой метки и сохранить в массив необходимые значения. Я пробовал объединять, комбинировать и зацикливать. Я где-то ошибаюсь.

Может кто-нибудь, пожалуйста, помогите мне.


person Juan J    schedule 04.03.2019    source источник
comment
Пожалуйста, отредактируйте свой вопрос и включите код, который вы пробовали, но он не работает должным образом.   -  person Dave    schedule 04.03.2019


Ответы (3)


Попробуйте этот код

$array_1 = array('Speed','Grade','Speed','Grade','Speed','Grade','Grade','Speed','Size');
$array_2 = array('5200 rpm','Red','7200 rpm','Blue','8900 rpm','Green','Purple','10000 rpm','Big');

foreach($array_1 as $key=>$elm){
    $finalArray[$elm][] = $array_2[$key];
}

echo("<pre>");
print_r($finalArray);
echo("</pre>");

С помощью foreach вы можете использовать метку для создания нового многомерного массива! Очень легко. Надеюсь, я помог вам, по любым вопросам, пожалуйста, комментируйте

person Davide    schedule 04.03.2019
comment
Именно то, что я искал! Можно ли объяснить мне эту часть $finalArray[$elm][] = $array_2[$key]; Большое спасибо! - person Juan J; 05.03.2019
comment
@JuanJ Здравствуйте, спасибо, что выбрали мой ответ как лучший. Тогда переменная $finalArray явно новая. И используйте его для формирования массива, как вы этого хотите. Затем я создаю массив с ключом цикла array_1. Затем для каждого значения массива_1 создайте ключевую метку $ (скорость, класс, ..). Затем я связываю значение array_2 с этим ключом. Это [] должно всегда создавать новый элемент в массиве. На самом деле, если вы удалите его, вы увидите, что конечный массив представляет собой просто 1 ключ-> значение. И это не все данные! - person Davide; 05.03.2019

Сохраните массив 1 как $description, а массив 2 как $value.

Вам нужно получить значения массива обоих массивов, используя:

$description = array_values($description);

И тогда вы можете использовать array_combine.

$combined = array_combine($description, $value);

Связанный (для значений массива) Преобразование ассоциативного массива в простой массив его значений в php

Документация по PHP для array_combine здесь.

person party-ring    schedule 04.03.2019
comment
Но значение массива принимает только одно значение для каждого ключа (посмотрите ссылку на ваш документ) - НЕ то, что хотел OP - person dWinder; 04.03.2019

ИЗМЕНИТЬ

Я снова читаю вопрос и вижу, что индексы одинаковы для массива 1 и массива 2.

$collection = array();
foreach (array1 as $key => $value){
    $collection[$value][] = $array2[$key];
}
person AythaNzt    schedule 04.03.2019