3

だから、ここに私の状況があります:

変数 ( $keywords) に格納された入力を取得しています。この変数は、文字列 (=1 キーワード) のようなもの"banana"か、配列 (=複数のキーワード) のようなものかのいずれかarray ("banana","apple","mango")です。

これは私がそれを使用している方法です:

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

$keywordが array の場合は正常に動作しますが、そうでない場合はエラーが発生します。(明らかに)

foreach構造をそのまま維持しながら、エラーを回避するための最も効率的な回避策は何ですか?


これは私が考えたものです(ループの前に置くために)が、私はそれがあまり好きではありません:

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

更新:皆さん、私はについて知っis_arrayています。switch私のポイントは、コードブロックを追加したり、 or if/elseステートメントなどを混乱させたりせずに、できるだけエレガントに行うことでした.

4

5 に答える 5

6

変数を配列にキャストするだけです。

$keywords = (array) $keywords;

変数が配列の場合は何も起こりません。それ以外の場合は配列に変換されます。したがって、 AND に1なります。array(1)'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

phpis_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 に答える