PHP - преобразование информации, представленной в формате строки, в формат массива - PullRequest
0 голосов
/ 22 мая 2019
$attribute_options_string = "Spice (Very Hot/3, Hot/2, Medium/1) | Size(Small,Medium,Large)";

$attribute_options_array = array(
 'spice' => array(
    'very hot' =>3,
     'hot' => 2,
     'medium' => 1
 ),
    'size' => array(
        'small',
        'medium',
        'large'
    )
);

Я пытаюсь написать функцию, которая преобразует формат строки в формат массива.

1 Ответ

3 голосов
/ 22 мая 2019

Как было кратко описано @tim в комментариях, вам просто нужно:

взорваться на трубе, петле, взорваться на запятой, петле, взорваться на слешах, если необходимо

Это не так просто, как вам нужно извлечь имя опции, и, поскольку у вас, кажется, есть переменный интервал в строках, безопаснее использовать preg_split вместо explode. Основываясь на ваших данных образца, это будет работать:

$attribute_options_string = "Spice (Very Hot/3, Hot/2, Medium/1) | Size(Small,Medium,Large)";
$attribute_options_array = array();
$attributes = preg_split('/\s*\|\s*/', $attribute_options_string);
foreach ($attributes as $attribute) {
    preg_match('/\s*(\w+)\s*\(([^)]+)/', $attribute, $matches);
    $attribute_name = strtolower($matches[1]);
    $options = preg_split('/\s*,\s*/', $matches[2]);
    foreach ($options as $option) {
        if (strpos($option, '/') !== false) {
            list($option_name, $option_value) = preg_split('#\s*/\s*#', $option);
            $attribute_options_array[$attribute_name][strtolower($option_name)] = $option_value;
        }
        else {
            $attribute_options_array[$attribute_name][] = strtolower($option);
        }
    }
}
var_export($attribute_options_array);

Выход:

array (
  'spice' => array (
    'very hot' => '3',
    'hot' => '2',
    'medium' => '1',
  ),
  'size' => array (
    0 => 'small',
    1 => 'medium',
    2 => 'large', 
  ), 
)

Демонстрация на 3v4l.org

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...