2012-04-08 31 views
2
$array = array(
    array(
     'key1', 
     'text 1 text 1 text 1' 
    ), 

    array(
     'key2', 
     'text 2 text 2 text 2' 
    ), 

    array(
     'key3', 
     'text 3 text 3 text 3' 
    ) 
); 

對不起,標題很難解釋,沒有一個例子。PHP:從列表中選擇小孩

用戶想要閱讀一些文本。例如,key2的文字。所以當輸入是key2,我想顯示文本:text 2 text 2 text 2

但是,如何選擇使用PHP的文本?

回答

4

如果可以,我想使用該密鑰的爲實際密鑰的數組中:

:如上所述

$array = array("key1" => "text 1 text 1", 
       "key2" => "text 2 text 2", 
       "key3" => "text 3 text 3"); 

//now use this: 
echo $array["key2"]; 

如果不能處理數組,你可以使用一個循環來創建一個數組

$newArray = array(); 
foreach($array as $sub){ 
    $newArray[$sub[0]] = $sub[1]; 
} 

這隻適用於如果您確定密鑰始終是第一個元素並且第二個文本是第二個文本的情況。

+0

這將是一個更容易地獄,但我不能這樣做,因爲它直接從數據庫中來。 – Thew 2012-04-08 15:04:47

+0

我更新了我的答案,並提供瞭解決方案來創建陣列。 – 2012-04-08 15:06:03

1

如果您需要動態地獲取想要的鍵,你會需要遍歷數組和匹配通緝「關鍵」:作爲@Lex建議它是真正重構目標磁盤陣列好主意

$wanted = "key2"; 
$text = NULL; 

foreach ($array as $V){ 
    if ($V[0] == $wanted){ 
     $text = $V[1]; 
     break; 
    } 
} 

...

3

由於它來自您的數據庫(根據您的評論),這取決於您需要多久執行一次。

有兩種選擇,可以重新格式化整個數組,這將需要一些時間,但可以使後面的查找速度更快,或者您只需遍歷數組即可找到密鑰。如果您需要進行多次查找,前者的解決方案是最好的,後者最適合單一查找。

因此,對於單查詢,你可以做

function find_key($arr, $needle) 
{ 
    foreach ($arr as $el) 
    { 
    list($key,$value) = $el; 
    if ($needle == $key) 
     return $value; 
    } 
    return false; 
} 

print find_key($array, 'key2'); // returns "text 2 text 2 text 2". 
+1

兩個提供的選項的好結合答案,+1 – 2012-04-08 15:11:22