2011-02-25 74 views
0

你好,我想知道如何做到以下幾點,因爲我一直在沒有答案四處走動。所以我會盡量簡化。只使用規則一次使用in_array

我已經爲一個關聯數組

$vNArray ['Brandon'] = $item[3]; 
$vNArray['Smith']= $item[4]; 
$vNArray ['Johnson']= $item[5]; 
$vNArray ['Murphy']= $item[6]; 
$vNArray ['Lepsky']= $item[7]; 

foreach ($vNArray as $key => $value){ 

if(!empty($value)){ 
    $result .= "\t\t\t\t<li><strong>$key</strong>" .$value. "</li>\n"; 
} 

但現在我希望指向數組所以這裏的特定值設置一些值是另一個數組:

$display_id=array('Brandon', 'Murphy'); 

foreach ($vNArray as $key => $value){ 
if(!empty($value)){ 
    //Looks into the display_id array and renders it differently 
    if (in_array($key, $display_id)) { 
    $data .= "\t\t<li id=\"".$vNArray['Brandon']."\">".$vNArray['Murphy']."</li>\n"; 

} else { 
$result .= "\t\t\t\t<li><strong>$key</strong>$value</li>\n"; 
} 

}

的第一個條件的結果是正確的,但對於in_array值都重複:

<li id="Brandon Value">Murphy Value</li> 
<li id="Brandon Value">Murphy Value</li> 

下面是正確的:

<li><strong>Smith</strong> Value of Smith</li> 
<li><strong>Smith</strong> Value of Johnson</li> 
<li><strong>Lepsky</strong> Value of Lepsky</li> 

如何阻止它取決於陣列的數量的重複?

回答

1
$data .= "\t\t<li id=\"".$vNArray['Brandon']."\">".$vNArray['Murphy']."</li>\n"; 

您已經對vNArray鍵進行了硬編碼,因此無論哪個名稱匹配,都始終輸出相同的值。你想

$data .= "\t\t<li id=\"{$key}\">{$value}</li>\n"; 

改爲。

不需要按照原樣進行字符串連接。 PHP可以很好地將數組元素插入到一個字符串中,並且不需要在任何地方轉義引號,這意味着可讀代碼難以閱讀。

0

仔細看看你的循環。

您正在使用foreach循環,這意味着您每次都要瀏覽數組。

您的if(in_array(...))條件會檢查密鑰是否在您的$display_id陣列中。對布蘭登和墨菲來說,這會發生兩次。

當這種情況發生兩次時,$ data被追加兩次,這意味着您將得到兩次顯示結果。

我不確定這有什麼幫助,但只是仔細看看你的循環。你能澄清你正在努力實現什麼,或者你想要的輸出是什麼?

祝你好運。

編輯:

我重讀你的問題,並意識到的東西 - 你只是想你的輸出打印一次?

調查break語法。在if條件中追加它後,添加一個break;,那將打印出一次循環。

+0

感謝您的迴應Foo,我需要對ID進行硬編碼,因爲我希望代碼中特定佔位符中的特定值。我試圖用你的語法來定位這些id,但是它出現了一個錯誤。關於你的第二點,BREAK;解決方案似乎是一個很好的解決方案,但是當我在上面的else之前添加它時,它只是停在第一條生成的行的右邊,並且在它生成後沒有出現。有任何想法嗎? – HGB 2011-03-01 17:55:29