2014-09-02 166 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 
    } 
    } 
相关问题