Приветствую! Задача: Выбирать значение поля "Наименование изготовителя" из последовательности: object(stdClass)#11913 (1) { ["meta_value"]=> string(921) "a:3: {s:145:"%d0%bd%d0%b0%d0%b8%d0%bc%d0%b5%d0%bd%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d0%b8%d0%b7%d0%b3%d0%be%d1%82%d0%be%d0%b2%d0%b8%d1%82%d0%b5%d0%bb%d1%8f";a:6:{s:4:"name";s:49:"Наименование изготовителя";s:5:"value";s:27:"Универсал-Люкс";s:8:"position";i:0;s:10:"is_visible";i:0;s:12:"is_variation";i:0;s:11:"is_taxonomy";i:0;}s:91:"%d0%b2%d0%b8%d0%b4-%d0%bd%d0%be%d0%bc%d0%b5%d0%bd%d0%ba%d0%bb%d0%b0%d1%82%d1%83%d1%80%d1%8b";a:6:{s:4:"name";s:31:"Вид номенклатуры";s:5:"value";s:16:"Продукты";s:8:"position";i:1;s:10:"is_visible";i:0;s:12:"is_variation";i:0;s:11:"is_taxonomy";i:0;}s:91:"%d1%82%d0%b8%d0%bf-%d0%bd%d0%be%d0%bc%d0%b5%d0%bd%d0%ba%d0%bb%d0%b0%d1%82%d1%83%d1%80%d1%8b";a:6:{s:4:"name";s:31:"Тип номенклатуры";s:5:"value";s:10:"Товар";s:8:"position";i:2;s:10:"is_visible";i:0;s:12:"is_variation";i:0;s:11:"is_taxonomy";i:0;}}" } Далее код разбил на части c выводом на экран, чтобы изолировать проблему. В итоге выдает, что массив $arr - пустой, хотя в массиве $manufacturers - 13 записей есть. Составил регулярку и протестировал на https://uvsoftium.ru/php/regexp_all.php - выбирает как надо. <?php $pattern = '.изготов\pL+.+\".+\".+\"([\s\pL-]+)\"/Uu'; ?> <?php echo count($manufacturers); ?> <br> // <?php $manufacturer = $manufacturers[3]; ?> <?php echo var_dump($manufacturer); ?> <br> <?php echo var_dump($pattern); ?> <br> <?php preg_match_all($pattern, $manufacturer, $arr, PREG_PATTERN_ORDER); ?><br> <?php echo var_dump($arr); ?>
В итоге var_dump показывает что в $manufacturer у тебя объект. К содержимому meta_value примени unserialize. PHP: unserialize($manufacturer->meta_value)
Применил: <?php $manufacturer = unserialize($manufacturers[3]->meta_value); ?> <?php var_dump($manufacturer); ?> <br> <?php preg_match($pattern, $manufacturer, $arr); ?><br> <?php var_dump($arr); ?> Возвращает NULL
@redxpill, там смысл был в том, чтобы сразу получить массив, а не проводить поиски с preg_match. PHP: $manufacturer = unserialize($manufacturers[3]->meta_value); echo "<pre>", var_export($manufacturer, true), "</pre>"; Код (Text): array ( '%d0%bd%d0%b0%d0%b8%d0%bc%d0%b5%d0%bd%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d0%b8%d0%b7%d0%b3%d0%be%d1%82%d0%be%d0%b2%d0%b8%d1%82%d0%b5%d0%bb%d1%8f' => array ( 'name' => 'Наименование изготовителя', 'value' => 'Универсал-Люкс', 'position' => 0, 'is_visible' => 0, 'is_variation' => 0, 'is_taxonomy' => 0, ), '%d0%b2%d0%b8%d0%b4-%d0%bd%d0%be%d0%bc%d0%b5%d0%bd%d0%ba%d0%bb%d0%b0%d1%82%d1%83%d1%80%d1%8b' => array ( 'name' => 'Вид номенклатуры', 'value' => 'Продукты', 'position' => 1, 'is_visible' => 0, 'is_variation' => 0, 'is_taxonomy' => 0, ), '%d1%82%d0%b8%d0%bf-%d0%bd%d0%be%d0%bc%d0%b5%d0%bd%d0%ba%d0%bb%d0%b0%d1%82%d1%83%d1%80%d1%8b' => array ( 'name' => 'Тип номенклатуры', 'value' => 'Товар', 'position' => 2, 'is_visible' => 0, 'is_variation' => 0, 'is_taxonomy' => 0, ), )
--- Добавлено --- Спасибо большое за помощь! Я выбрал нужные значения и снова застрял. Но я подозреваю, что можно сделать проще. Я пытаюсь выбрать уникальные значения из атрибута товаров из таких сериализованных строк, сформировать фильтр и вывести все товары соответствующие значению фильтра в каталоге... Woocommerce.