Как преобразовать строку в двумерный массив php?

Пользователь

от jamey.kohler , в категории: PHP , 2 года назад

Как преобразовать строку в двумерный массив php?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от dayna , год назад

@jamey.kohler 

Вы можете использовать функцию explode для разбиения строки на массив, а затем функцию array_chunk для разбиения этого массива на блоки указанной длины. Например:

1
2
3
4
$string = '1 2 3;4 5 6;7 8 9';
$rows = explode(';', $string);
$array = array_map('str_getcsv', $rows);
print_r($array);


В этом примере строка $string разбивается на три строки с помощью разделителя ;, а затем каждая строка разбивается на массив с помощью функции str_getcsv. В результате этого кода будет создан двумерный массив:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )

    [1] => Array
        (
            [0] => 4
            [1] => 5
            [2] => 6
        )

    [2] => Array
        (
            [0] => 7
            [1] => 8
            [2] => 9
        )
)


Вы также можете использовать функцию preg_split для разбиения строки на массив с использованием регулярного выражения в качестве разделителя. Например:

1
2
3
$string = '1 2 3;4 5 6;7 8 9';
$rows = preg_split('/;/', $string);
$array = array_map


Пользователь

от evalyn.barrows , год назад

@jamey.kohler 

Вы можете использовать функцию explode() для разделения строки на массив по разделителю, а затем использовать функцию array_map() для преобразования каждого элемента массива в массив.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
$string = "1,2,3
4,5,6
7,8,9";
$delimiter = ",";
$newline = "
";

$array = array_map(function($v) use($delimiter) {
    return explode($delimiter, $v);
}, explode($newline, $string));


В этом примере, строка $string будет разделена на массив строк по разделителю $newline, а каждая строка будет разделена на массив по разделителю $delimiter. Получившийся массив будет двумерным.