2012-10-06 24 views
0

我有以下數組。如何查看列表中的一個var?而不是在列表中

$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

您是否必須擁有這樣的數據?你能不能爲這個類似的數組使用一個關聯數組('apple'=> 3,'banana'=> 2,...),因爲它會讓你的代碼更好看...... – kuncajs

+0

不,我沒有這樣的數據,只是例子 –

+0

快速的問題你會每一個例子,你的列表看起來像這個'數組(「蘋果:3」,「香蕉:2」,「canopule:6」,「葡萄:5」,「櫻桃:8」 「香蕉:10」);'..重複的水果,但不同的值 – Baba

回答

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

簡單地檢查是否有東西在循環,如果是打印結果,如果沒有找到無添加。

+0

找到結果時打破循環? –

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

+0

對OP的一點解釋會很好 – jeremy

+0

一些編輯。對不起,「快速拍攝」。現在應該更清楚和正確。隨意問或改進! – matthias

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

我知道,你是不完全問到這個問題,但我想說,有時候是簡單的想存儲數據,而不是提出新的算法的方式。

+0

對於你的建議,我將數據存儲在txt文件中,每個目錄及其內容的每行文件(超過6個信息),由\ t分割 –

相關問題