我有以下数组。
$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!";
}
如果匹配,它可以正常工作。但如果没有,我会
草莓:没找到!草莓:没找到!草莓:没找到了!草莓:没找到了!草莓:没找到了!
它返回每个错误的情况,而不仅仅是一个。
答案 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)
使用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
只是为了说明分割像你这样的复合值的另一种方法。寻找冒号的出现,通过使用从开头到n的字符来分割字符串,对于run1提取水果名称,并将字符串n + 1分别用于提取计数值的run2的结尾。请记住,字符串中字符的索引从位置0开始。