0

次の配列があります。

$ar = array("apple:3","banana:2","canopule:6","grapes:5","cherry:8");

次の変数かどうかを確認するにはどうすればよいですか

$a = "grapes";

は配列 (この場合grapes:5は ) 内にあり、そうであれば、一致した文字列を返します。つまり、「ぶどう: 5」

リストにない場合 (例: "strawberry" に一致)、"strawberry : not found" を返します。

私はこれを持っています:

for($i = 0; $i < count($ar); $i++) {
    list($name,$count)=explode(":",$ar[$i]);
    if($a==$name)
        echo "$a : $count";
    else
        echo "$a : not found!";
}

一致していれば問題なく動作します。しかし、そうでなければ、私は得る

いちご:見つかりません!いちご:見つかりません!いちご:見つかりません!いちご:見つかりません!いちご:見つかりません!

1 つだけではなく、すべての false ケースを返します。

4

3 に答える 3

2

さて、あなたがこのような配列を使用するようにプッシュされておらず、教育目的を求めている場合は、連想配列を試してください:コードは非常に単純に見えます:

$ar = array("apple" => 3,"banana" => 2,"canopule" => 6,"grapes" => 5,"cherry" => 8);
$a = "grapes";

echo isset($ar[$a]) ? "$a : ".$ar[$a] : "$a : not found";

あなたがこれについて正確に質問していないことは知っていますが、新しいアルゴリズムを考え出すよりも、データを保存する方法を考える方が簡単な場合があると言いたいと思います。

于 2012-10-06T18:11:53.407 に答える
2

このようにしてみてください:

$ar=array("apple:3","banana:2","canopule:6","grapes:5","cherry:8");
$a = "strawberry";
$result = '';
for($i=0;$i<count($ar);$i++){
    list($name,$count)=explode(":",$ar[$i]);
    if($a == $name){
        $result = "$a : $count";
        break;
    }
}

if($result){
    echo $result;
} else {
    echo $a." : Not found";
}

ループに何かがあるかどうかを確認するだけです。そうであれば結果を出力し、追加が見つからない場合は確認します。

于 2012-10-06T17:35:48.780 に答える
1

foreachとを使用する別の方法substr

$ar = array("apple:3","banana:2","canopule:6","grapes:5","cherry:8");
$a = "cherry";    
$result = $a . ": not found";

foreach ($ar as $fruit) {
    if (substr($fruit,0,strpos($fruit,":")) == $a) {
        $result = $a . ": " . substr($fruit,strpos($fruit,":") + 1);
        break;
    } 
}

echo $result;

foreach配列内のすべての要素を繰り返します(foreach ($ar as $num => $fruit)キーと値を区別するためのように使用することもできます)。substrの代わりに使用するのexplodeは、自分のような複合値を分割する別の方法を説明するためだけのものです。コロンの出現を探すために、文字列は、フルーツ名を抽出するrun1の最初からnまでの文字と、カウント値を抽出するrun2の最後までの文字n+1を使用して分割されます。文字列内の文字のインデックスは位置0から始まることに注意してください。

于 2012-10-06T17:41:55.397 に答える