当元素计数相同时,PHP combine_array 产生 false

问题描述

如果这个问题与其他人很接近,我们深表歉意。我已经尝试了所有解决方案来完成一些简单的事情,但失败了。 :-(

我希望将数组 1 中的键分配为数组 2 的键。

$demos_keys = array_keys($demos);

//$c = array_combine($demos_keys,$csvdata); produces "FALSE"
//$c = $demos_keys +  $csvdata; simply adds the arrays but doesn't assign keys

So then I tried to loop through each element to assign the keys manually - to no avail! 

foreach ($csvdata as $row){
     for($i = 0; $i<count($demo_keys); $i++) {
        $csvdata[$demo_keys[$i]]=$row[$i];
     } 
}

demos_keys: lastname":"lastname","email":"email","d1":"phone","d2":"status"

csvdata: "Dryer,fdryer@email.com,Backfield,north\r","Harris,fharris@email.com,Corp,South\r"等

我觉得 csvdata 数组不知何故不稳定。每件事都说它是一个大约有 1000 行的数组,但是最后一个元素末尾的回车让我很困扰。我想我以后会处理它。

我还能尝试什么!?感谢大家的贡献!

解决方法

看起来您的 CSV 数据的每一行都没有被解析为单独的变量(您是否使用 fgetsfile 而不是 fgetcsv 从文件中读取它?)。因此,您需要先将其拆分,然后才能将其与 $demos_keys 中的键组合。这样的事情应该可以工作:

$demos_keys = array("lastname","email","d1","d2");
$csvdata = array("Dryer,fdryer@email.com,Backfield,North\r","Harris,fharris@email.com,Corp,South\r");

$result = array();
foreach ($csvdata as $row) {
    $data = explode(',',trim($row));
    $result[] = array_combine($demos_keys,$data);
}
print_r($result);

输出:

Array
(
    [0] => Array
        (
            [lastname] => Dryer
            [email] => fdryer@email.com
            [d1] => Backfield
            [d2] => North
        )
    [1] => Array
        (
            [lastname] => Harris
            [email] => fharris@email.com
            [d1] => Corp
            [d2] => South
        )
)

Demo on 3v4l.org