无法从 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]);