0

我有以下数组。

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

如何检查以下变量是否

$a = "grapes";

是否在数组中(在这种情况下grapes:5),如果是,则返回匹配的字符串。即,“葡萄:5”

如果它不在列表中(例如,匹配“草莓”),则返回“草莓:未找到”。

我有这个:

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

如果匹配,则工作正常。但如果没有,我得到

草莓:未找到!草莓:未找到!草莓:未找到!草莓:未找到!草莓:未找到!

它返回每个错误的情况,而不仅仅是一个。

4

3 回答 3

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 回答
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";

I know that you were not asking exactly about this but I wanted to say that sometimes it is simpler to think of way of storing the data rather than coming up with new algorithms.

于 2012-10-06T18:11:53.407 回答
1

foreach使用and的另一种方式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只是为了说明另一种拆分像您这样的复合值的方法。寻找冒号的出现,通过使用从开头到 n 的字符来分割字符串,用于提取水果名称的 run1,并使用从字符 n+1 到结尾的用于提取计数值的 run2。请记住,字符串中字符的索引从位置 0 开始。

于 2012-10-06T17:41:55.397 回答