PHP: создать ассоциативный массив из списка без замены значений - PullRequest
0 голосов
/ 06 ноября 2011

У меня есть этот список в файле:

paul,1
peter,1
mary,1
ian,1
paul,2
peter,2
mary,2
paul,3
mary,3

Я должен получить массив, подобный этому:

$people=array(
    'paul'=>array(1,2,3),
    'peter'=>array(1,2),
    'mary'=>array(1,2,3),
    'ian'=>array(1)
);

Вот где я:

$a=file($f);//$a=array, $f=file
foreach($a as $b){
    $l=explode(',',$b);//$l=list
    $p=$l[0];//$p=person
    $n=$l[1];//$n=number
}
print_r($lista);

Но это не работает, конечно. Есть идеи?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 06 ноября 2011

Вы почти у цели, но вам нужно проверить имена переменных. Например. $d и $e нигде не определены, и вы передаете неверный аргумент in_array.

Это должно сделать это:

$file = file($f);
$list = array();

foreach($file as $line){
    list($name, $value) = explode(',', $line);
    if(!isset($list[$name])) {
        $list[$name] = array();
    }
    $list[$name][] = $value;
}

print_r($list);
1 голос
/ 06 ноября 2011

Нет требования для проверки того, что массив уже существует или нет для текущего имени. PHP с учетом приведенного ниже синтаксиса с радостью создаст массив для имени, если оно еще не существует.

foreach ($a as $b) {
    list($name, $number) = explode(',', $b);
    $lista[$name][] = $number;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...