массив вставляется в многомерный массив, когда оба ключа объекта одинаковы в PHP

#php #multidimensional-array

#php #многомерный-массив

Вопрос:

У меня есть двухмерный массив в формате ниже

 $skillInfo = Array
(
    "Mechanical" => Array
        (
            "0" => 100
            "1" => 400
        )

    "Understanding" => Array
        (
            "0" => 200
        )

    "Application/Appreciation" => Array
        (
            "0" => 300
        )

);

$skillMaster = [
["skillID" => 1, "skillName" => "Mechanical"],
["skillID" => 2, "skillName" => "Understanding"],
["skillID" => 3, "skillName" => "Application/Appreciation"]
];
 

$skillMaster skillName это то же $skillInfo самое, что и ключи, поэтому мы можем заменить $skillInfo ключи из $skillMaster skillID.

Ожидаемый результат

 Array
(
    [1] => Array
        (
            [0] => 100
            [1] => 400
        )

    [2] => Array
        (
            [0] => 200
        )

    [3] => Array
        (
            [0] => 300
        )

    )
 

мой код

 foreach($skillInfo as $key1 => $val1){
    $skillInfo[$key1][$skillMaster[$val1["skillID"]]] = $skillMaster[$val1["skillID"]] ?? [];
}
 

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

Комментарии:

1. $val1 это $skillInfo элемент, которого у него нет skillID .

2. имя навыка присутствует $skillInfo в массиве, я хочу заменить вместо имени skillID

3. Я знаю, что это то, что ты хочешь сделать. Почему вы решили $val1['skillID'] , что это сработает?

Ответ №1:

 foreach($skillMaster as $item){
  if(array_key_exists($item['skillName'], $skillInfo)){
        $skillInfo[$item['skillID']] = $skillInfo[$item['skillName']];
        unset($skillInfo[$item['skillName']]);
   }
}
 

Комментарии:

1. Включение объяснения внесенных вами изменений было бы полезно как для ОП, так и для любых будущих читателей.