3

所以,这是我的情况:

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

这是我使用它的方式:

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

$keyword是 array时,这可以正常工作,但是当它不是时,我会出错。(很明显)

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


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

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

更新:伙计们,我知道is_array。我的观点是尽可能优雅地做到这一点,而不添加代码块或使用switchor if/else语句等造成混乱。

4

5 回答 5

6

只需将变量转换为数组:

$keywords = (array) $keywords;

如果变量是一个数组,则不会发生任何事情,否则它将被转换为一个数组:因此 1将是array(1) AND 'keyword'将是array('keyword')

于 2012-08-01T12:42:03.710 回答
0
if (isset($keywords) && !is_array($keywords)) { $keywords = Array($keywords); }
else if (!isset($keywords)) { $keywords = Array(); }
于 2012-08-01T12:38:59.100 回答
0

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

于 2012-08-01T12:39:07.930 回答
0

使用 php is_array内置函数

if(is_array($keywords))
foreach ($keywords as $keyword)
{
    // do sth with $keyword
}
于 2012-08-01T12:39:08.640 回答
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);

于 2012-08-01T12:39:13.357 回答