将CSV字符串转换为数组键,值为1或true

时间:2014-10-27 14:35:57

标签: php arrays

有人可以帮助找到更好的解决方案来解决下面的代码。

这是我现有的解决方案:

$list = '54,78,3,5';

$list = explode(",",$list);

foreach($list as $k => $v) { $compare[$v] = 1; }

当我在$ list上运行array_flip而不是foreach时,它会返回一个这样的数组:

Array(
    54 => 0,
    78 => 1,
    ...
)

我需要这个,所以已经采用这种格式的另一个数组可以与IF语句进行比较:

Array(
    54 => 1,
    78 => 1,
    ...
)

2 个答案:

答案 0 :(得分:2)

$list = '54,78,3,5';
$list = explode(",",$list);
$array = array_combine($list, array_fill(0, count($list), 1));
print_r($array);

Array
(
    [54] => 1
    [78] => 1
    [3] => 1
    [5] => 1
)

array_fill()将创建一个数组,其所有值均为1,与$list数组的大小相同。 array_combine()然后创建一个新数组,其值为$list作为键,array_fill()创建的值;

Demo

答案 1 :(得分:0)

您是否需要原始$list作为变量?难道你不能从数据来源的一开始就把它变成一个数组,并在值上附加1或true吗?

否则,在当前foreach之前,添加一个新循环并通过$list(您将其制作成一个数组)并创建一个新数组,将所需值附加到每个键(从中获取的键) $list):

foreach ($list as $key)
  {
    $new_array[$key] = 1;
  }