我试图让一小段代码工作,但我有点卡住了。
当人们提交表单时,它会保存一些关键字,但数量上,以防止人们使用inspect元素更改输入。 每个关键字都有自己的编号。
例如:
1 = test
2 = test2
etc.
当人们提交表单时,他们的输入会保存在mysql数据库中,如下所示:
1, 2
我从这一点开始尝试做的是我想显示关键字而不是数字。 我已经为关键字制作了一个数组:
$array = array(1 => 'test1', 2 => 'test2', 3 => 'test3', 4 => 'test4');
有没有办法只显示数组中与数据库中的数字相同的值?
答案 0 :(得分:0)
使用MySQL查询轻松完成...示例:
select KeywordName from MyTable where KeywordId in (1, 2)
然后,您可以使用PHP准备好的语句(如PDO)将数字传递给MySQL,并将值提取回数组。
答案 1 :(得分: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];
}
答案 2 :(得分: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);
答案 3 :(得分:0)
我的意思是我有一个以逗号分隔的列表,例如:1,2。 我也有一个数组,位于我的问题中。我在尝试什么 要做的是我只想要数组中的值,它们是相同的 逗号分隔列表中的那些。所以,如果我的列表包含 数字1和2,我只想要数组中的值1和2。
假设我们有这个;
$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
}
}
答案 4 :(得分: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
组中具有相应键的值。