微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决当元素计数相同时,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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。