繁体   English   中英

PHP通过逗号分隔列表从数组中获取值

[英]PHP get values from array by comma separated list

我正在尝试使一小段代码正常工作,但是我有点卡住了。

当人们提交表单时,它保存了一些关键字,但是以数字形式保存,以防止人们使用inspect元素更改输入。 每个关键字都有自己的编号。

例如 :

1 = test
2 = test2
etc.

人们提交表单时,他们的输入将保存在mysql数据库中,如下所示:

1, 2

从现在开始,我想做的是我想显示关键字而不是数字。 我已经为关键字创建了一个数组:

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

有没有办法只显示数组中与数据库中的数字相同的值?

使用MySQL查询轻松完成...示例:

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

然后,您可以使用像PDO这样的PHP预处理语句将数字传递给MySQL,然后将这些值取回数组中。

抱歉,我一开始误解了您的问题,但是您可以使用以下方法:

$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];
}

您可以执行以下操作

$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);

我的意思是说我有一个用逗号分隔的列表,例如: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
    }
  }

首先,您不应该在数据库中存储序列化数据。 而是适当地规范化您的数据。

说:

$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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM