2014-10-27 113 views
2

请有人帮助找到更好的解决方案,下面的代码。将CSV字符串转换为数组键值为1或true

这里是我现有的解决方案:

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

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

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

当我运行array_flip代替$名单上的foreach它返回一个这样的数组:

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

我需要这使另一个数组是已经以这种格式可以与IF语句进行比较:

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

回答

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

+0

在我的数据集上工作得非常好,速度更快!将在时限到期后接受。谢谢约翰 – Tricky 2014-10-27 14:46:06

0

你需要原始$list是一个变量?难道你不能在数据从何处开始创建一个数组,并将数值附加1或真值?

否则,您目前的foreach之前,添加一个新的循环,并经过$list(你到一个数组),并作出新的阵列所需的值添加到每个键($list拍摄键):

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