使用foreach循环变量时,该变量可能不是数组

3

因此,这是我的情况:

我正在获取存储在变量中的一些输入($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个回答

6

只需将变量转换为数组:

$keywords = (array) $keywords;

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

1
非常简单易懂;目前已有7个答案,只有真正理解了我的问题的本质。非常感谢你,伙计! - Dr.Kameleon
Gj,我删除了我的回答 ;) - Peon
当我看到这个时,我正在写类似的东西,点赞。 - Rhys
是的,完全超越了我的(已删除)答案。+1 - Fluffeh

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

0

使用 PHP is_array 内置函数

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

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);


OP想要将字符串转换为数组以在foreach循环中使用 - 您的解决方案在转换后会出现问题,并且不会使用该循环。 - MiDo

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接