PHP:从列表构建关联数组而不替换值

时间:2011-11-05 23:39:46

标签: php multidimensional-array php-5.3

我将此列表放在一个文件中:

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 个答案:

答案 0 :(得分:4)

你快到了,但是你必须检查你的变量名。例如。 $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 :(得分:1)

没有要求来检查当前名称是否已存在数组。考虑到下面的语法,PHP将为名称创建数组(如果它尚不存在)。

foreach ($a as $b) {
    list($name, $number) = explode(',', $b);
    $lista[$name][] = $number;
}