首页 > 解决方案 > 当元素计数相同时,PHP combine_array 产生 false

问题描述

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

我希望将数组一中的键分配为数组二的键。

$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: 姓氏":"姓氏","email":"email","d1":"phone","d2":"status"

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

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

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

标签: phparraysforeacharray-combine

解决方案


看起来您的 CSV 数据的每一行都没有被解析为单独的变量(您是使用fgetsorfile而不是从文件中读取它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
        )
)

3v4l.org 上的演示


推荐阅读