Разделенная строка массива PHP и целые числа

Ниже представлен массив строк и чисел. Как можно разделить строковые и числовые значения на отдельные массивы (с строки в одном массиве и числа в другом массиве)?

array('a','b','c',1,2,3,4,5,'t','x','w')
Стоит ли изучать 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 и хотите разрабатывать...
2
0
45
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Прокрутите их, проверьте, is_numeric, и добавьте в соответствующий массив:

$original = array('a','b','c',1,2,3,4,5,'t','x','w');

$letters = array();
$numbers = array();

foreach($original as $element){
    if (is_numeric($element)){
        $numbers[] = $element;
    }else{
        $letters[] = $element;
    }
}

https://3v4l.org/CAvVp

    $data = array('a','b','c',1,2,3,4,5,'t','x','w');
    $integerArray = array();
    $stringArray = array();
    $undefinedArray = array();
    foreach($data as $temp)
    {
        if (gettype($temp) == "integer")
        {
            array_push($integerArray,$temp);
        }elseif (gettype($temp) == "string"){
            array_push($stringArray,$temp);
        }else{
            array_push($undefinedArray,$temp);
        }
    } 

Вы также можете сделать это в одной строке, используя массив_фильтр()

$numbers = array_filter($arr,function($e){return is_numeric($e);});
$alphas = array_filter($arr,function($e){return !is_numeric($e);});

print_r($numbers);
print_r($alphas);

Использование foreach(), как в ответе @jnko, будет наиболее эффективным, потому что он выполняет итерацию по массиву только один раз.

Однако, если вы не заинтересованы в микрооптимизации и предпочитаете писать лаконичный или функциональный код, то я рекомендую использовать array_filter() с вызовами is_numeric(), а затем проводить ключевые сравнения между первым результатом и исходным массивом.

Код: (Демо)

$array = ['a','b',0,'c',1,2,'ee',3,4,5,'t','x','w'];
$numbers = array_filter($array, 'is_numeric');
var_export($numbers);
var_export(array_diff_key($array, $numbers));

Выход:

array (
  2 => 0,
  4 => 1,
  5 => 2,
  7 => 3,
  8 => 4,
  9 => 5,
)
array (
  0 => 'a',
  1 => 'b',
  3 => 'c',
  6 => 'ee',
  10 => 't',
  11 => 'x',
  12 => 'w',
)

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