2012-02-06 72 views

回答

8

请参见:PHP的is_string()is_numeric()功能。

array_filter相结合,就可以比较两个数组,看看它们是否相等。

function isStringOrNumeric($in) { 
// Return true if $in is either a string or numeric 
    return is_string($in) || is_numeric($in); 
} 

class Test{} 

$a = array('one', 2, 'three', new Test()); 
$b = array_filter($a, 'isStringOrNumeric'); 

if($b === $a) 
    echo('Success!'); 
else 
    echo('Fail!'); 
+0

如果他需要分别在每个字段上存储数据,那么效果会非常好,但是当您只需要整个数组中的一个值时效率很低,不是吗? – Vyktor 2012-02-06 21:54:58

+0

我的歉意,错了。我已经更新它使用array_filter,但我仍然认为这个解决方案将遍历数组两次(但我相信是不可避免的) – 2012-02-06 22:05:54

+0

我明白你的函数的逻辑,但我认为很多程序员忘了“老方法”去思考以程序方式和顺序方式处理事物。看看我的答案,诚实地告诉我你喜欢什么。 – Vyktor 2012-02-06 22:21:03

3

如果你正在寻找通过数组做一次运行,你可以写自己的函数根据您的具体标准检查每个值。喜欢的东西:

function is_string_or_numeric($var) 
{ 
    return is_string($var) || is_numeric($var); 
} 

然后您可以筛选阵列,如:

if (array_filter($arr, 'is_string_or_numeric') === $arr) 
0

嗯,这真的取决于你所说的“字符串或数字”是什么(这可能意味着is_numeric(X),或is_int(X) || is_string(X),或任何数量的其他东西)。也许最有效的方法(虽然它是更冗长)是这样的:

public function isValid(array $array) { 
    $valid = TRUE; 

    foreach ($arr as $value) { 
     if (!is_int($value) && !is_string($value)) { 
      $valid = FALSE; 
      break; 
     } 
    } 

    return $valid; 
} 
7

更有效的将是这样:

function isStringNumberArray($array){ 
    foreach($array as $val){ 
    if(!is_string($val) && !is_numeric($val)){ 
     return false; 
    } 
    } 
    return true; 
} 

这种方法:

  • 不会创建新的数组
  • 将在第一个无效值后停止
0

很多这个问题的答案。如果你想使用你一直使用的方法,你会想为此编写自己的函数。

所以你要检查阵列中的每个元素,如果它是一个数字:

function isNumber($array_element) { 
    return is_numeric($array_element); 
} 

,然后调用使用array_filter

if (array_filter($arr, 'is_number') { 
    // is a number code here. 
} 

该测试功能,您写了一个函数“ IS_STRING()“?如果不是,array_filter($arr, 'is_string')可能不会按照您认为的方式工作)。

+1

难道你acheive同样的事情,用更少的代码,如果你只是跑,如果(array_filter($改编,“is_numeric”),而不是创建一个新的功能。 – 2014-05-20 16:51:06

+0

似乎题外话我 – 2017-10-10 16:05:52

0

两个事实:

  • 的foreach比array_map()更快,因为它不使用===运营商比is_int/IS_STRING快,像这​​样调用每个迭代
  • 功能:

    if ((int)$value === $value) echo "its an int";

    if ((string)$value === $value) echo "its a string";

相关问题