





Прокрутите их, проверьте, 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;
}
}
$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',
)