PHP: нубский вопрос по массивам

Хожу-брожу
На сайте с 07.01.2011
Offline
115
1006

Всем привет.

Подскажите, как объединить все значения в массиве?

Дано:

Array
(
[0] => Array
(
[0] => рисунок
[1] => картинка
[2] => вывеска
)

[1] => Array
(
[0] => специи
[1] => куркума
)

[2] => Array
(
[0] => шоколад
[1] => десерт
[2] => печенье
[3] => сыр
[4] => сок
)

)

На выходе нужно:

Array
(
[0] => рисунок
[1] => картинка
[2] => вывеска
[0] => специи
[1] => куркума
[0] => шоколад
[1] => десерт
[2] => печенье
[3] => сыр
[4] => сок
)

или:

Array
(
[0] => рисунок
[1] => картинка
[2] => вывеска
[3] => специи
[4] => куркума
[5] => шоколад
[6] => десерт
[7] => печенье
[8] => сыр
[9] => сок
)

А Ты против?
TF-Studio
На сайте с 17.08.2010
Offline
334
#1

можно так попробовать

задача типовая

Всё ещё лучший способ заработка для белых сайтов: GoGetLinks (https://www.gogetlinks.net/?inv=fahbn8).
danforth
На сайте с 18.12.2015
Offline
153
#2

Хожу-брожу,

Хожу-брожу:
На выходе нужно:
Array
(
[0] => рисунок
[1] => картинка
[2] => вывеска
[0] => специи
[1] => куркума
[0] => шоколад
[1] => десерт
[2] => печенье
[3] => сыр
[4] => сок
)

Так не сделаете, потому что ключи должны быть уникальными.

Второй вариант возможен, вот код:

<?php

$food = array(
array(
"Мандарины",
"Апельсины",
"Бананы",
"Киви",
),
array(
"Помидоры",
"Перец",
"Капуста",
),
array(
"Лапша",
"Остальное",
),

);

$output = array();

function getValuesRecursive($array, &$output) {
foreach ($array as $key => $value) {
if (!is_array($value)) {
array_push($output, $value);
} else {
getValuesRecursive($value, $output);
}
}
}

getValuesRecursive($food, $output);

echo '<pre>';
var_dump($output);

Основная суть в функции getValuesRecursive, как видно из названия, она рекурсивная. Она вызывает сама себя при определенных условиях. Почитайте про рекурсию.

Junior Web Developer
Хожу-брожу
На сайте с 07.01.2011
Offline
115
#3

Спасибо, вот как получилось (по второму варианту):

$arrOut = array();

foreach($arrIn as $subArr){

$arrOut = array_merge($arrOut,$subArr);

}

danforth
На сайте с 18.12.2015
Offline
153
#4

Хожу-брожу, в контексте этой задачи - да, сработает. Но если появится ещё один уровень глубины, то все равно будет многомерный массив на выходе.

W
На сайте с 09.04.2013
Offline
46
#5

Еще вот такой вариант:


<?php

$food = array(
array(
"Мандарины",
"Апельсины",
"Бананы",
"Киви",
),
array(
"Помидоры",
"Перец",
"Капуста",

),
array(
"Лапша",
"Остальное",
array(
"печенье",
"десерт",
array(
"специи",
"куркума",
array(
"сыр",
"сок",
)
)
)
),

);

$iterator = new \RecursiveIteratorIterator(new \RecursiveArrayIterator($food));
print_r(iterator_to_array($iterator,false));
S
На сайте с 30.09.2016
Offline
469
#6

В этом топике просматриваются 2 подхода: теоретический, стремящийся охватить всевозможные варианты, и сугубо практический - минимальными усилиями решить конкретную задачу, не имеющую расширительного толкования.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
TF-Studio
На сайте с 17.08.2010
Offline
334
#7
Sitealert:
В этом топике просматриваются 2 подхода: теоретический, стремящийся охватить всевозможные варианты, и сугубо практический - минимальными усилиями решить конкретную задачу, не имеющую расширительного толкования.

2 разных подхода к разработке в принципе.

1. сделать быстро под текущую задачу и потом уже переписывать, если надо будет

2. предусмотреть все варианты и очень долго все планировать

Хожу-брожу
На сайте с 07.01.2011
Offline
115
#8

Спасибо всем за помощь и мнения. Не думал, что на этом форуме можно получить быструю и квалифицированную помощь по php. (только осваиваю азы, интересная штука...)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий