如何检查列表中的一个var?而不在列表中

时间:2012-10-06 17:31:44

标签: php for-loop

我有以下数组。

$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!";
}

如果匹配,它可以正常工作。但如果没有,我会

  草莓:没找到!草莓:没找到!草莓:没找到了!草莓:没找到了!草莓:没找到了!

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

3 个答案:

答案 0 :(得分: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";
}

如果没有找到添加,只需检查是否有循环中的内容,如果没有找到添加。

答案 1 :(得分: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";

我知道你并没有问到这个问题,但我想说有时候想一下存储数据的方式而不是想出新算法会更简单。

答案 2 :(得分:1)

使用foreachsubstr的另一种方式。

$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开始。