2014-09-02 86 views
0

我試圖讓一小段代碼工作,但我有點卡住了。PHP通過逗號分隔列表從數組中獲取值

當人們提交一個表單時,它會保存一些關鍵字,但是在數量上可以防止人們通過檢查元素改變輸入。 每個關鍵字都有自己的編號。

例如:

1 = test 
2 = test2 
etc. 

當人們提交表單,他們的投入會保存在MySQL數據庫是這樣的:

1, 2 

我試圖從這個角度做的是我想要顯示關鍵字而不是數字。 我已經做了關鍵字的數組:

$array = array(1 => 'test1', 2 => 'test2', 3 => 'test3', 4 => 'test4'); 

有沒有辦法,只顯示從數組是相同的,從數據庫中的數字值是多少?

+0

沒有完全理解你的要求,但如果你想有一個與之關聯的數組中所有的值,可以使用[array_values(http://php.net/manual/en/function .array-values.php) – bhargavg 2014-09-02 16:28:02

+0

@bhargavg我的意思是我有一個逗號分隔的列表,例如:1,2。我也有一個數組,位於我的問題。我想要做的是我只想要數組中的值,它們與逗號分隔列表中的值相同。 所以如果我的列表包含數字1和2,我只想要數組中的值1和2。 – 2014-09-02 16:33:52

+1

「防止人們用檢查元素改變輸入」 - 嗯?我認爲這並不能真正幫助你以你的想法。 – DanMan 2014-09-02 16:38:12

回答

0

首先,你不應該在你的數據庫中存儲序列化的數據。而是適當地規範你的數據。

這就是說:

$fromDB = array_flip(array_map('trim',explode(',',"1, 2"))); 
$keyMap = array(1 => 'test1', 2 => 'test2', 3 => 'test3', 4 => 'test4'); 
$intersection= array_intersect_key($keyMap, $fromDB); 

$intersection變量將保持容納僅從$keyMap陣列具有在$fromDB一個相應的鍵的那些值的數組。

http://php.net/array_intersect_key

+0

謝謝,這種方式正是我想要的方式 – 2014-09-02 16:50:15

+0

YW。如果數據庫中的字符串包含逗號之間的任何一個字符,則可能必須修剪展開陣列中每個條目的空白。 – DanMan 2014-09-02 16:53:01

+0

好吧,我會再次謝謝你:) – 2014-09-02 16:56:13

0

很容易與MySQL查詢...例如做:

select KeywordName from MyTable where KeywordId in (1, 2) 

然後,您可以使用PHP編寫的語句像PDO的號碼傳遞到MySQL,和值取回到您的陣列。

0

對不起,我誤解你的問題在第一,但你可以使用這個:

$list = "1, 2"; 
$keyArray = explode(',', $list); 

$newArray = array(); //this will be your new array containing all the right values 
forEach($keyArray as $key){ 
    $key = trim($key); 
    if(isset($array[$key])) 
     $newArray[$key] = $array[$key]; 
} 
+0

您正在修整第2行中的數組。 – DanMan 2014-09-02 16:51:20

+0

@DanMan \ * facepalm \ *我將對其進行編輯 – Jonan 2014-09-02 16:55:07

0

你可以做如下

$fromDB = array(1,2); 

$keyMap = array(1 => 'test1', 2 => 'test2', 3 => 'test3', 4 => 'test4'); 

$keywords = array();  

foreach ($fromDB as $value) 
{ 
    $keywords[] = $keyMap[$value]; 
} 

print_r($keywords); 
0

我的意思是,我有一個逗號分隔的列表,例如:1,2。 我也有一個數組,位於我的問題。我正在嘗試 要做的是我只想要數組中的值,它們與在逗號分隔列表中的值相同,如 。所以如果我的列表包含 數字1和2,我只需要數組中的值1和2。

使用array_key_exists()

假設我們有這樣的;

$s = 2; //2 was fetched from the database 
    $array = array(1 => 'test1', 2 => 'test2', 3 => 'test3', 4 => 'test4'); 
    if(array_key_exists($s, $array)) { 
     echo $array[$s]; 
    } 

您提到了逗號分隔的列表。

$csv = "2,1,4,500"; //Was fetched from the database 
    $array = array(1 => 'test1', 2 => 'test2', 3 => 'test3', 4 => 'test4'); 
    foreach(explode(",", $csv)) { 
    if(array_key_exists($s, $array)) { 
     echo $array[$s] . PHP_EOL; //Final Output: test2 \r\n test1 \r\n test4 
    } 
    } 
相關問題