Как узнать состоит ли массив только из чисел или строк?

  • Автор темы Автор темы mit
  • Дата начала Дата начала

mit

Новичок
Как узнать состоит ли массив только из чисел или строк?

Как узнать состоит ли массив только из чисел или строк? Есть ли стандартные функции или придется обычным перебором? Может кто знает?
 
array_filter() может облегчит тебе чуток жизнь
либо какие нить извращения с implode() + preg_match()
 
Ну извращения мне не надо. Хотелось услышать более конкретные варианты.
А за array_filter() спасибо.
 
PHP:
$a = array(1,2,5109,14149, '444', 35325325, "2592952525");
var_dump(is_numeric(implode('', $a))); // bool(true)
$a = array(1,2,'str');
var_dump(is_numeric(implode('', $a))); // bool(false)
быстрее это или перебор проверь сам
 
itprog
PHP:
$a = array(1.2, 3.4);
$a = array(1,-2);
Хотя понятие "только из чисел" у тредстартера неопределено.
 
Я нашел решение.
Код:
function IsNum($arr)
{
      $isNum = true;
      foreach($arr as $var)
      {
             if(is_numeric($var)) continue;
             else $isNum = false; break 1;
      }
      return $isNum;
}
Правда перебор, но должно работать.
Упс. Сам себе же отвечаю....
 
PHP:
$arr = array(1, 2.2, -1);
var_dump(sizeof($arr) == sizeof(array_filter($arr, 'is_numeric')));
 
mit
только поправь немного:
PHP:
function IsNum($arr)
{
      foreach($arr as $var)
      {
             if(!is_numeric($var)) { return false; }
      }
      return true;
}
 
PHP:
$result=(
count(array_filter($arr,'is_numeric'))==count($arr)
);
$arr это наш массив
Одни числа - TRUE, нет FALSE
 
rob72
а тебя не смущает что ты повторил опубликованный 4 постами ранее вариант? ;)
 
вот тоже вариант на тему:
if(preg_match("/^[\d]+$/", join($arr))) { print "числа"; } else { print "не только числа"; }
 
Нда уж.
"/^[\d\,\.\-]+$/"
так ближе, но все равно хромает
например вот так же может быть:
$arr = array(1, ,,,3.8, 4....., -----5);
короче не самый лучший вариант :)
 
Сверху