2014-10-27 69 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; 
    }