is_array()的区别

时间:2011-06-06 12:27:17

标签: php arrays

我有一段代码,其中变量可以是数组,也可以只是字符串。

if(!is_array($relation['display_name']))
{
    // do something with $relation['display_name']
}
else
{
    foreach($relation['display_name'] as $display_name)
    {
        // do the same with $display_name
    }
}

这当然有效 - 但不是很好。而且我必须做很多次。有没有更好的方法呢?

6 个答案:

答案 0 :(得分:7)

你可以这样做:

foreach((array)$relation['display_name'] as $display_name) {
     // do something with $display_name
}

答案 1 :(得分:5)

你可以这样做:

if(!is_array($relation['display_name'])) {
    $relation['display_name'] = array($relation['display_name']);
}

# do your foreach here

答案 2 :(得分:1)

我建议你研究解决问题的根源。

为什么$relation['display_name']有时候是一个数组,有时候不是?

问题修复比修补结果更好。

话虽如此,我会创建以下内容:

function transformToArray($mValue) {
    return (is_array($mValue)) ? $mValue : array($mValue);
}

答案 3 :(得分:1)

你可以用三元运算符写得更短:

foreach ((is_array($a) ? $a : array($a)) as $val) {
  ...
}

答案 4 :(得分:0)

我认为这不是处理这个问题的坏方法。我见过的大多数PHP代码处理类似的东西。

答案 5 :(得分:0)

如果使用> = PHP 5.3,您可以尝试这样的事情。如果元素是单数或隐式地在所有数组成员(如果是数组)上,它将运行元素上的代码。

function call($element, $func) {
    if (is_array($element)) {
       foreach($element as $value) {
           $func($value);
       }
    } else {
       $func($element);
    }
}

call($relation['display_name'], function($display_name) {
   // Anything you wanna.
});

CodePad