我试图解析一个CSV文件,作为其中的一部分,我想从我的所有单元格中删除前导/尾随空格。由于它是一个CSV文件,因此格式化为2D数组。最初我尝试过:
foreach($csv as $row){
foreach($row as $cell){
$cell = trim($cell);
}
}
然而结果是未修剪的。
接下来,我尝试使用array_map作为建议here。
$csv = array_map('trim', $csv);
这让我回到了一排空行。所以我也试过了
foreach($csv as $row){
$row = array_map('trim', $row);
}
像我的第一次尝试一样,没有任何改变。
以下是我用作输入的CSV数据:
名字,姓氏,联系方式,电话,电子邮件 John,Doe,电子邮件,1-XXX-XXX-XXXX,john @ example.com Jane,Doe,电话,1-XXX-XXX-XXXX,jane @ example.com
特别是我试图让我的脚本修剪第一行最后一个单元格中的前导空格(" Email" =>" Email")。
答案 0 :(得分:3)
进行修剪时,您不会修改原始数组。您应该在foreach
循环中通过引用获取值。
foreach($csv as &$row){
foreach($row as &$cell){
$cell = trim($cell);
}
}
为了能够直接修改循环内的数组元素 使用&前面的$ value。在这种情况下,值将由 reference
答案 1 :(得分:2)
您需要引用$row
才能对数组进行更改(请注意&
):
foreach($csv as &$row){
$row = array_map('trim', $row);
}
答案 2 :(得分:0)
如果你看到它就像你放在这里一样,
" Email" => "Email"
你必须从密钥修剪它,你能说明你如何分配命名标题。因为我会在那里修剪它,但是使用array_map('trim',$ data)将删除空格,我整天都这样做。
只需清理你可以做的钥匙,
$keys = array_map( 'trim', array_keys($data) );
$data = array_combine( $keys, $data );
答案 3 :(得分:0)
$input = [
'parent' => [
'child' => ' element to be trimmed '
]
];
array_walk_recursive($input, function (&$item) {
if (!is_array($item)) {
$item = trim($item);
}
});