Как сгладить массив в PHP, а затем преобразовать целые числа в строку в новых записях массива?

У меня есть массив массивов с именем 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"
)

Как мне получить ожидаемый массив?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
64
2

Ответы 2

Например:

$a = array();
foreach($user_ids as $row)
  $a[] = (string)$row[0];
print_r($a);

http://php.net/manual/en/language.types.array.php

Вы можете использовать встроенный 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));

Другие вопросы по теме