Используйте одномерный массив, разнесите его и создайте многомерный массив

#php #arrays #multidimensional-array

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

Вопрос:

Итак, у меня есть массив, который выглядит следующим образом:

 Array
 (
  [0] => john.smith@domain.com:John
  [1] => jane.doe@domain.com:Jane
)
  

Как вы можете видеть, это почта пользователя и имя пользователя, разделенные двоеточием.

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

 Array
 (
   [0] => Array
    (
        [user_email] => john.smith@domain.com
        [user_name] => John
    )

   [1] => Array
    (
        [user_email] => jane.doe@domain.com
        [user_name] => Jane
    )

)
  

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

1. foreach цикл, explode на двоеточии, попробуй, я уверен, что ты сможешь это сделать 🙂

2. Я знаю, что foreach и explode будут работать. Но тогда как бы я приступил к созданию нового массива?

3. $new[счетчик ключ][user_email]= разнесенная часть 0; $new[счетчик ключ][имя_пользователя]= разнесенная часть 1;

Ответ №1:

Вы можете сделать это следующим образом:

 <?php

$data = [
    "john.smith@domain.com:John",
    "jane.doe@domain.com:Jane"
];

function customArray($data){
    $final = [];
    $i = 0;

    foreach($data as $k => $v){
        $splitted = explode(":",$v);
        $final[$i]['user_email'] = $splitted[0];
        $final[$i]['user_name']  = $splitted[1];
        $i  ;
    }

    return $final;
}

print_r(customArray($data));
  

Смотрите результаты здесь.
В основном то, что я делаю выше, это

  • выполните итерацию по массиву,
  • разнесите значение по разделителю : ,
  • проиндексируйте их в рамках итерации, используя то же самое [$i] , чтобы новый ключ / значение были правильно сопоставлены с исходным элементом массива.

Хотя правильно называйте вещи, я просто привожу пример 🙂

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

1. да, верно, я немного отредактирую и добавлю еще немного объяснений

2. @joseph-parker если вы чего-то не понимаете, не стесняйтесь спрашивать, а также, добро пожаловать в SO!

3. вам не нужен $ i, вы могли бы просто использовать исходные ключи массива

Ответ №2:

Вы можете разнести каждый элемент исходного массива и сохранить его в новом массиве, как показано ниже. Наконец, вы получите желаемый формат в массиве $result.

 $source_array = array("john.smith@domain.com:John","jane.doe@domain.com:Jane");
foreach($name_email_array as $key => $value){
        $name_email = explode(":",$value);
        $result[$key]['user_email'] = $name_email[0];
        $result[$key]['user_name']  = $name_email[1];
    }