Объединяя один и тот же ключ в массиве и печатая его в smarty - PullRequest
0 голосов
/ 19 апреля 2020

У меня есть $product.features массив в PrestaShop 1.7.

Вот пример данных в массиве. $product.features.name: $product.features.value

width: 100 m
method: Nail Down
method: Main Floor
Warranty: 25 years
Color: Red
Color: Blue

Я хочу напечатать вышеуказанные данные как

Width: 100m
method: Nail Down, Main Floor
Warranty: 25 years
Color: Red, Blue

Вот код smarty, который у меня есть

{foreach from=$product.features item=feature}
    <div class="col-md-3 col-sm-6 col-xs-12">
        <div class="name">{$feature.name}</div>
    </div>
    <div class="col-md-3 col-sm-6 col-xs-12">
        <div class="value flex_child">{$feature.value}</div>
    </div>         
 {/foreach}

Ответы [ 2 ]

0 голосов
/ 20 апреля 2020

Один из вариантов - подготовить массив функций для зацикливания ключей и значений.

Например, используя array_reduce и explode , чтобы получить массив, в котором ключи являются частью перед :, а значения представляют собой результат взрыва с , в качестве разделителя:

$features = [
    "width with: 100 m",
    "method: Nail Down",
    "method: Main Floor",
    "Warranty: 25 years",
    "Color: Red",
    "Color: Blue"
];

$features = array_reduce($features, function($carry, $item){
    $parts = explode(":", $item);
    $carry[$parts[0]][] = $parts[1];
    return $carry;
});

foreach ($features as $key => $value) {
    echo "$key: " . implode(',', $value) . PHP_EOL;
}

Выход

width:  100 m
method:  Nail Down, Main Floor
Warranty:  25 years
Color:  Red, Blue

См. Php демо

0 голосов
/ 20 апреля 2020

Попробуйте это:

{foreach from=$product.features item=feature}
    <div class="col-xs-12">
        <div class="name">{$feature.name}: {$feature.value}</div>
    </div>         
{/foreach}
...