将foreach与一个可能不是数组的变量一起使用

时间:2012-08-01 12:36:42

标签: php arrays foreach

所以,这是我的情况:

我得到一些存储在变量($keywords)中的输入。 此变量可以是字符串(= 1个关键字) - 如"banana",也可以是数组(=多个关键字) - 如array ("banana","apple","mango")

这就是我使用它的方式:

foreach ($keywords as $keyword)
{
    // do sth with $keyword
}

$keyword是数组时,此方法正常,但是当它不是我收到错误时。 (很明显)

什么是最有效的解决方法,以避免错误,同时保持我的foreach结构原样?


这就是我想到的(放在循环之前),但我真的不喜欢它:

if (count($keywords)==1) $keywords = array($keywords);

更新:伙计们,我知道关于is_array。我的观点是尽可能优雅地进行,不添加代码块或使用switchif / else语句等造成混乱。

5 个答案:

答案 0 :(得分:6)

只需将变量强制转换为数组:

$keywords = (array) $keywords;

如果变量是数组,则不会发生任何事情,否则它将转换为数组: 所以 1将为array(1)'keyword'将为array('keyword')

答案 1 :(得分:0)

if (isset($keywords) && !is_array($keywords)) { $keywords = Array($keywords); }
else if (!isset($keywords)) { $keywords = Array(); }

答案 2 :(得分:0)

只需使用is_array命令:http://php.net/manual/en/function.is-array.php

答案 3 :(得分:0)

使用php is_array内置函数

if(is_array($keywords))
foreach ($keywords as $keyword)
{
    // do sth with $keyword
}

答案 4 :(得分:0)

$type = gettype($keywords);
switch ($type)
{
    case "string":
       // do what you need with string
       break;
    case "array":
       foreach ($keywords as $keyword)
       {
           // do smth when is array
       }
       break;
}

检查类型,我的解决方案允许您检查字符串,数组或其他类型,如果需要,您可以指定。 在更简单的解决方案中,使用if (is_array($keywords);