无法从 PHP 中的多维数组中删除所有包含键和值的单引号
Trouble removing all single quotes enclosing keys and values from a multi-dimensional array in PHP
我的 CSV 数组看起来像这样(-它非常大所以我只显示前 2 个元素):
<?php $AuscompDataFeed_array = array (
0 =>
array (
'"Manufacturer ID"' => '"MAN-ID-GNRCABNW-02"',
'"LQ Price"' => '"1.90000000000000000000"',
'"AvailableQty"' => '"19.00000000000000000000"',
'"Net Weight"' => '"0.10000000000000000000"',
'"Item Category Code"' => '"GNR"',
'"Product Group Code"' => '"CAB"',
'"Minor Category 1"' => '"CAB-CAT5"',
'"Vendor Name"' => '""',
'"Warranty"' => '""',
'"Dimension"' => '""',
'"Description1"' => '"2mt Cat5e Cross Network Cable. Compatible to all network ports, desktops and notebooks. Uptp 1000Mbps network speeds."',
'"Image"' => '"https://redacted.com/uploads/image/GNR-CAB-NW-02-CRS.jpg"',
),
1 =>
array (
'"Manufacturer ID"' => '"K2A"',
'"LQ Price"' => '"10.00000000000000000000"',
'"AvailableQty"' => '"86.00000000000000000000"',
'"Net Weight"' => '"0.50000000000000000000"',
'"Item Category Code"' => '"ITR"',
'"Product Group Code"' => '"KBD"',
'"Minor Category 1"' => '"KBD-WIRED"',
'"Vendor Name"' => '""',
'"Warranty"' => '""',
'"Dimension"' => '""',
'"Description1"' => '"Itron K2A Keyboard, PS2 Beige"',
'"Image"' => '"https://redacted.com/uploads/image/ITR-KBD-K2A-WHT-PS2.jpg"',
),
我尝试从数组的所有键和值中删除最外面的单引号,这样双引号在被大多数 CSV 处理程序解析时就不会是文字,但这个 returns 是一个空数组所以我的正则表达式可能有误:
foreach ($left as $k => $v){
foreach ($v as $key => $value){
//strip $value of double quotes enclosing it
$value = preg_replace('/^\'/','',$value);
$value = preg_replace('/\'$/','',$value);
$left[$k][$key] = $value;
//strip $key of double quotes enclosing it
$newkey = preg_replace('/^\'/','',$key);
$newkey = preg_replace('/\'$/','',$key);
$left[$k][$newkey] = $left[$k][$key];
unset($left[$k][$key]);
}
}
如何只删除最外面的单引号。许多字段也会有字段内单引号,所以我使用 ^
和 $
来隔离感兴趣的单引号。
如果您觉得有更 efficient/elegant 的方法来解决问题,那么替代代码也是可以接受的。
您的正则表达式没有错误,但您试图替换字符串中不存在的第一个和最后一个 single quotes,它们包含在字符串中。
字符串本身以双引号开头,您可以删除它缩短代码以使用交替 |
$value = preg_replace('/^"|"$/','',$value);
$newkey = preg_replace('/^"|"$/','',$key);
得到空数组的原因是 preg_replace returns 未更改的字符串。
首先将覆盖相同的值:
$left[$k][$newkey] = $left[$k][$key];
然后您将取消设置相同的值,因为键没有更改并删除所有值:
unset($left[$k][$key]);
我的 CSV 数组看起来像这样(-它非常大所以我只显示前 2 个元素):
<?php $AuscompDataFeed_array = array (
0 =>
array (
'"Manufacturer ID"' => '"MAN-ID-GNRCABNW-02"',
'"LQ Price"' => '"1.90000000000000000000"',
'"AvailableQty"' => '"19.00000000000000000000"',
'"Net Weight"' => '"0.10000000000000000000"',
'"Item Category Code"' => '"GNR"',
'"Product Group Code"' => '"CAB"',
'"Minor Category 1"' => '"CAB-CAT5"',
'"Vendor Name"' => '""',
'"Warranty"' => '""',
'"Dimension"' => '""',
'"Description1"' => '"2mt Cat5e Cross Network Cable. Compatible to all network ports, desktops and notebooks. Uptp 1000Mbps network speeds."',
'"Image"' => '"https://redacted.com/uploads/image/GNR-CAB-NW-02-CRS.jpg"',
),
1 =>
array (
'"Manufacturer ID"' => '"K2A"',
'"LQ Price"' => '"10.00000000000000000000"',
'"AvailableQty"' => '"86.00000000000000000000"',
'"Net Weight"' => '"0.50000000000000000000"',
'"Item Category Code"' => '"ITR"',
'"Product Group Code"' => '"KBD"',
'"Minor Category 1"' => '"KBD-WIRED"',
'"Vendor Name"' => '""',
'"Warranty"' => '""',
'"Dimension"' => '""',
'"Description1"' => '"Itron K2A Keyboard, PS2 Beige"',
'"Image"' => '"https://redacted.com/uploads/image/ITR-KBD-K2A-WHT-PS2.jpg"',
),
我尝试从数组的所有键和值中删除最外面的单引号,这样双引号在被大多数 CSV 处理程序解析时就不会是文字,但这个 returns 是一个空数组所以我的正则表达式可能有误:
foreach ($left as $k => $v){
foreach ($v as $key => $value){
//strip $value of double quotes enclosing it
$value = preg_replace('/^\'/','',$value);
$value = preg_replace('/\'$/','',$value);
$left[$k][$key] = $value;
//strip $key of double quotes enclosing it
$newkey = preg_replace('/^\'/','',$key);
$newkey = preg_replace('/\'$/','',$key);
$left[$k][$newkey] = $left[$k][$key];
unset($left[$k][$key]);
}
}
如何只删除最外面的单引号。许多字段也会有字段内单引号,所以我使用 ^
和 $
来隔离感兴趣的单引号。
如果您觉得有更 efficient/elegant 的方法来解决问题,那么替代代码也是可以接受的。
您的正则表达式没有错误,但您试图替换字符串中不存在的第一个和最后一个 single quotes,它们包含在字符串中。
字符串本身以双引号开头,您可以删除它缩短代码以使用交替 |
$value = preg_replace('/^"|"$/','',$value);
$newkey = preg_replace('/^"|"$/','',$key);
得到空数组的原因是 preg_replace returns 未更改的字符串。
首先将覆盖相同的值:
$left[$k][$newkey] = $left[$k][$key];
然后您将取消设置相同的值,因为键没有更改并删除所有值:
unset($left[$k][$key]);