У меня есть массив массивов с именем user_ids:
$user_ids = Array(
[0] => Array ( [0] => 12 )
[1] => Array ( [0] => 13 )
[2] => Array ( [0] => 14 )
)
У меня есть функция под названием flatten_ar, которая возвращает массив, который разбивает его на один уровень:
function flatten_ar($ar,$flat_ar) {
for($i=0; $i <= count($ar); $i++) {
if (is_array($ar[$i])) {
$flat_ar = flatten_ar($ar[$i], $flat_ar);
} else {
if (isset($ar[$i])) {
$flat_ar[] = $ar[$i];
};
};
};
return $flat_ar;
};
Я создаю новый массив с именем $ user_ids_ar, который вызывает функцию, преобразует записи в строки и распечатывает результаты:
$user_ids_ar = flatten_ar($user_ids, array());
$user_ids_ar = json_decode(json_encode($user_ids));
print_r($user_ids_ar);
$user_ids_ar = json_decode(json_encode($user_ids));
print_r($user_ids_ar);
Однако я получаю несколько ошибок для каждой записи:
Notice: Undefined offset: 1 in C:\..\index.php on line 30
Call Stack
# Time Memory Function Location
1 0.0019 244528 {main}( ) ...\index.php:0
2 0.0066 271544 flatten_ar( ) ...\index.php:24
3 0.0067 271592 flatten_ar( ) ...\index.php:31
Затем последовал вывод нового массива, который сделал противоположное тому, что я хотел.
Array (
[0] => Array (
[0] => 12 )
[1] => Array (
[0] => 13 )
[2] => Array (
[0] => 14
)
)
)
Массив, который я ожидал:
Array(
[0] => "12"
[1] => "13"
[2] => "14"
)
Как мне получить ожидаемый массив?






Например:
$a = array();
foreach($user_ids as $row)
$a[] = (string)$row[0];
print_r($a);
Вы можете использовать встроенный array_walk_recursive для перебора всех идентификаторов в $user_ids независимо от глубины и добавления их строковых значений в массив результатов в обратном вызове.
$user_ids_ar = [];
array_walk_recursive($user_ids, function($id) use (&$user_ids_ar) {
$user_ids_ar[] = strval($id);
});
Если ваш входной массив имеет только один уровень глубины, как пример в вашем вопросе, тогда вам не нужна рекурсия, вы можете просто сопоставить strval по столбцу 0.
$user_ids_ar = array_map('strval', array_column($user_ids, 0));