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

mit

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

Как узнать состоит ли массив только из чисел или строк? Есть ли стандартные функции или придется обычным перебором? Может кто знает?
 

zerkms

TDD infected
Команда форума
array_filter() может облегчит тебе чуток жизнь
либо какие нить извращения с implode() + preg_match()
 

mit

Новичок
Ну извращения мне не надо. Хотелось услышать более конкретные варианты.
А за array_filter() спасибо.
 

itprog

Cruftsman
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)
быстрее это или перебор проверь сам
 

SiMM

Новичок
itprog
PHP:
$a = array(1.2, 3.4);
$a = array(1,-2);
Хотя понятие "только из чисел" у тредстартера неопределено.
 

mit

Новичок
Я нашел решение.
Код:
function IsNum($arr)
{
      $isNum = true;
      foreach($arr as $var)
      {
             if(is_numeric($var)) continue;
             else $isNum = false; break 1;
      }
      return $isNum;
}
Правда перебор, но должно работать.
Упс. Сам себе же отвечаю....
 

zerkms

TDD infected
Команда форума
PHP:
$arr = array(1, 2.2, -1);
var_dump(sizeof($arr) == sizeof(array_filter($arr, 'is_numeric')));
 

itprog

Cruftsman
mit
только поправь немного:
PHP:
function IsNum($arr)
{
      foreach($arr as $var)
      {
             if(!is_numeric($var)) { return false; }
      }
      return true;
}
 

rob72

Новичок
PHP:
$result=(
count(array_filter($arr,'is_numeric'))==count($arr)
);
$arr это наш массив
Одни числа - TRUE, нет FALSE
 

zerkms

TDD infected
Команда форума
rob72
а тебя не смущает что ты повторил опубликованный 4 постами ранее вариант? ;)
 

Graber

Новичок
вот тоже вариант на тему:
if(preg_match("/^[\d]+$/", join($arr))) { print "числа"; } else { print "не только числа"; }
 

Graber

Новичок
Нда уж.
"/^[\d\,\.\-]+$/"
так ближе, но все равно хромает
например вот так же может быть:
$arr = array(1, ,,,3.8, 4....., -----5);
короче не самый лучший вариант :)
 
Сверху