2012-02-27 10 views
1

У меня есть массив, который имеет список PID, Email и Client в массиве с разделителями-запятыми. Мне было интересно, есть ли способ проанализировать входной массив и сгенерировать новый массив с «электронной почтой» в качестве ключа и всех уникальных PID для этого письма. Поскольку входной массив может иметь тысячи элементов, мне было интересно узнать о самом быстром подходе.Построение массива с ключом из массива ввода

Ex: Input Array (PID, Email, Client) 
-------------------------------------- 
Array ( 
[0] => 10, [email protected],Gmail 
[1] => 11, [email protected],Gmail 
[2] => 12, [email protected],Gmail 
[3] => 13, [email protected],Gmail 
[4] => 14, [email protected],Gmail 
[5] => 15, [email protected],Gmail 
) 


Ex: Output Array (with Email as the key): 
--------------------------------------------- 
Array (
[[email protected]] => (
        [0] => 10 
       [1] => 12 
     ), 
[[email protected]] => (
       [0] => 11 
       [1] => 13 
       [2] => 15 
     ), 
[[email protected]] => (
       [0] => 14 
     ) 
) 

Благодаря

+1

Еогеасп(), а затем взрываются() на запятой –

+0

куда делась разделенный запятыми массив родом из? Вы вызываете 'fgets()' в файл CSV? –

+0

no..came from db – Jake

ответ

3
// $input holds your initial array: 
// $ouput is output... 
$output = array(); 
foreach ($input as $arr) { 
    // Explode the comma-delimited lines into 3 vars 
    list($pid, $email, $client) = explode(",", $arr); 
    // Initialize a new array for the Email key if it doesn't exist 
    if (!isset($output[$email])) $output[$email] = array(); 
    // Append the PID to the Email key 
    $output[$email][] = $pid; 
} 
0
$emails = array(); 

foreach($array as $item){ 
    $data = explode(",", $item); 
    $id = trim($data[0]); 
    $email = trim($data[1]); 
    if (!isset($emails[ $email ]){ $emails[ $email ] = array(); } 
    array_push($emails[ $email ], $id); 
} 
1

Только так я могу думать так:

$outputArray = array(); 
foreach ($inputArray as $value) 
{ 
    list($pid, $email) = explode(",", trim($value)); 
    $outputArray[$email][] = $pid; 
} 
Смежные вопросы