2012-07-03 15 views
0

的代碼是:

<?php 
$notes = array("Main/folder/02/12.jpg = twelve", 
       "Main/folder/02/16.jpg = sixteen" 
       ); 
$imglist = array("12.jpg", 
        "13.jpg", 
        "14.jpg", 
        "15.jpg", 
        "16.jpg" 
       ); 
for ($i=0;$i<(count($imglist));$i++){ 
    if(in_array($imglist[$i], $notes)){ 
     echo $imglist[$i]; 
     //Get key($notes) and //Cant figure out how to implement this key(); 
     echo $notes[$key]; 
    } //if ENDS 
} //for ENDS 
?> 

我需要的是,$ i = 0,$ i = 4的,如果()返回TRUE &做呼應。

的僞代碼/邏輯是:

  • 迭代通過所有的$ imglist陣列一個接一個。
  • 如果在$ notes數組中找到完整的$ imglist [$ i]字符串,請在$ notes中獲取該值的鍵/索引,然後echo $ notes [$ key]和$ imglist [$ i]。或者Echo $註釋[$ key]。

例如本for循環所需的輸出應爲:

12.jpg Main/folder/02/12.jpg = twelve 
16.jpg Main/folder/02/16.jpg = sixteen 

的問題是,現在所有這些代碼只是輸出無。意味着如果條件不是真的返回TRUE。而在理論上,它應該在$ i爲0時返回TRUE。4.我的if()條件是否錯誤?是不是把php $ imglist作爲一個字符串?我應該使用strpos嗎?

回答

3

in_array()使用鬆散的比較來搜索元素,並且不會產生您正在查找的結果。

相反,你需要用自己的邏輯(使用strpos()如你猜)來實現你想要的功能,例如:

foreach($imglist as $image_key => $image) 
    foreach($notes as $notes_key => $note) 
     if(!(strpos($note, $image) === false)) 
      echo "$image $note\n"; 

will output

12.jpg Main/folder/02/12.jpg = twelve 
16.jpg Main/folder/02/16.jpg = sixteen 
+0

謝謝,工作完美,像@Pox一樣然而,我有莫不過它使用循環而不是foreach,因爲我一直在圍繞foreach語句包裝頭。代碼在這裏http://codepad.org/l4V7zkgQ它現在也迴應迭代(雖然我沒有問它有問題)。再看看,再次感謝。 – DavChana

+0

有一件事,通過檢查IF條件是否返回TRUE(如在我的代碼中鏈接到上面的評論中)與您的IF條件相比,您說IF NOT FALSE有什麼區別。我正在使用IF TRUE。 – DavChana

+1

是的,因爲'strpos()'可能返回0,這會被你的版本錯誤地解釋。 [這是一個例子](http://codepad.org/WSSPiJbw)什麼時候會失敗。要修復你的版本,你需要比較'strpos()'的返回值與'!== false' – nickb

0

可以實現這使用strpos()

$notes = array("Main/folder/02/12.jpg = twelve", 
      "Main/folder/02/16.jpg = sixteen" 
      ); 
$imglist = array("12.jpg", 
       "13.jpg", 
       "14.jpg", 
       "15.jpg", 
       "16.jpg" 
      ); 


foreach($imglist as $image){ 
foreach($notes as $key => $note){ 
$position = strpos($note,$image); 
if ($position !== false){ 
echo "$image $note <br>"; 
} 
} 
}