【问题标题】:Using foreach with a variable which may NOT be an array将 foreach 与可能不是数组的变量一起使用
【发布时间】:2012-08-01 12:36:42
【问题描述】:

所以,这是我的情况:

我将一些输入存储在变量 ($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 语句等造成混乱。

【问题讨论】:

    标签: php arrays foreach


    【解决方案1】:

    只需将变量转换为数组:

    $keywords = (array) $keywords;
    

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

    【讨论】:

    • 非常简单; 7 个答案(到目前为止),只有 you 得到了我问题的本质。非常感谢,伙计!
    • Gj,删除了我对此的回答;)
    • 看到这个的时候正在写类似的东西,+1。
    • 是的,完全击败了我(已删除)的答案。 +1
    【解决方案2】:
    if (isset($keywords) && !is_array($keywords)) { $keywords = Array($keywords); }
    else if (!isset($keywords)) { $keywords = Array(); }
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        使用phpis_array内置函数

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

        【讨论】:

          【解决方案5】:
          $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 循环中使用它 - 您的解决方案在转换后会中断并且不使用循环。
          猜你喜欢
          • 1970-01-01
          • 2017-04-15
          • 2014-03-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多