Проблема удаления всех одинарных кавычек, содержащих ключи и значения, из многомерного массива в PHP - PullRequest
0 голосов
/ 01 февраля 2020

Мой 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, но это возвращает пустой массив, поэтому я, вероятно, допустил ошибку в своем регулярном выражении:

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]);

    }
}

Как я могу удалить только самые внешние одинарные кавычки. Во многих полях также есть одиночные кавычки в поле, поэтому я использовал ^ и $ для выделения интересующих одинарных кавычек.

Если вы считаете, что существует более эффективный / элегантный подход к проблеме , тогда альтернативный код также приемлем.

1 Ответ

1 голос
/ 01 февраля 2020

В вашем регулярном выражении нет ошибки, но вы пытаетесь заменить первые и последние одинарные кавычки , которых нет в строке, они заключают строку.

Строки сами по себе начинаются с двойной кавычки, которую вы можете удалить, закорачивая код для использования чередования |

$value = preg_replace('/^"|"$/','',$value);
$newkey = preg_replace('/^"|"$/','',$key);

Причина, по которой вы получаете пустой массив, заключается в том, что preg_replace возвращает неизменная строка.

Сначала будет перезаписано то же значение:

$left[$k][$newkey] = $left[$k][$key];

Затем вы сбросите то же значение, так как ключ не изменился, удалив все значения:

unset($left[$k][$key]);
...