Написание содержимого строки HTML со значениями массива в Laravel Controller - PullRequest
0 голосов
/ 06 ноября 2019

То, что я пытаюсь сделать, это написать строку html в контроллере с зацикленными значениями массива. Так, например;

$content = "Your store, at location A, has these items added to them". add array loop here. "Do take note!";

Мой массив будет таким:

array (
  0 => 
  array (
    'id' => '5db29b6d31c391731239bbdf',
    'name' => 'Diamond bracelet (sample)',
    'tags' => 
    array (
      0 => 'female',
      1 => 'jewelry',
    ),
    'category' => 'Accessories',
    'sku' => '1029EHW',
    'priceType' => 'Fixed',
    'unitPrice' => 190,
    'cost' => 90,
    'trackStockLevel' => true,
    'isParentProduct' => false,
  ),
  1 => 
  array (
    'id' => '5db29b6d31c391731239bbdb',
    'name' => 'Long-sleeved shirt(sample)(M)',
    'tags' => 
    array (
      0 => 'tops',
      1 => 'cotton',
    ),
    'category' => 'Women\'s Apparel',
    'sku' => 'ABC1234-M',
    'priceType' => 'Fixed',
    'unitPrice' => 47.170000000000002,
    'cost' => 20,
    'trackStockLevel' => true,
    'isParentProduct' => false,
    'parentProductId' => '5db29b6d31c391731239bbd4',
    'variationValues' => 
    array (
      0 => 
      array (
        'variantGroupId' => '5db29b6d31c391731239bbd5',
        'value' => 'M',
      ),
    ),
  ),
)  

Обратите внимание, что массив может иметь много экземпляров product_name и sku или не иметь ни одного.

Как сделатья заполняю это в своей строке, чтобы быть как;

$content = "Your store, at location A, has these items added to them, 1) asd, 2)def, 3)asf . Do take note! 

Ответы [ 4 ]

1 голос
/ 06 ноября 2019
$content = "Your store, at location A, has these items added to them,". $this->getItemList($collection) .". Do take note!"
# Somewhere else in the controller
protected function getItemList(Collection $collection): string
{
    return $collection->pluck('name')
                      ->merge($collection->pluck('sku'))
                      ->map(function($item, $key) { 
                          return ($key + 1) . ') ' . $item; 
                      })
                      ->implode(', ');
}
1 голос
/ 06 ноября 2019

Попробуйте, я для простоты использовал \ sprintf, проверьте, соответствует ли вывод вашей цели.

<?php

function stringMethod(): string
    {
        $count = 0;
        $arrayString = [];
        $array = [['product_name' => 'abc', 'product_sku' => 'def'],['product_name' => 'abc', 'product_sku' => 'asd']];

        foreach ($array as $value){
            $count++;
            $arrayString[] = sprintf('%s)%s', $count, $value['product_sku']);
        }

        $string = \implode(',', $arrayString);

        return \sprintf("Your store, at location A, has these items added to them %s Do take note!", $string);
    }

    echo stringMethod();
1 голос
/ 06 ноября 2019

Надеюсь, это поможет вам. попробуйте сделать это в меньшем количестве строк

$ content = "В вашем магазине в местоположении A к ним добавлены эти элементы",;

    $productArray = array (0 => array ('id' => '5db29b6d31c391731239bbdf','name' => 'Diamond bracelet (sample)','tags' => array (0 => 'female',1 => 'jewelry',),'category' => 'Accessories','sku' => '1029EHW','priceType' => 'Fixed','unitPrice' => 190,'cost' => 90,'trackStockLevel' => true,'isParentProduct' => false,),1 => array ('id' => '5db29b6d31c391731239bbdb','name' => 'Long-sleeved shirt(sample)(M)','tags' => array (0 => 'tops',1 => 'cotton',),'category' => 'Women\'s Apparel','sku' => 'ABC1234-M','priceType' => 'Fixed','unitPrice' => 47.170000000000002,'cost' => 20,'trackStockLevel' => true,'isParentProduct' => false,'parentProductId' => '5db29b6d31c391731239bbd4','variationValues' => array (0 => array ('variantGroupId' => '5db29b6d31c391731239bbd5','value' => 'M'))));  

    foreach ($productArray as $key => $product) {
        $content .= ($key+1).') '.$product['name'];
        if (count($productArray)-1!=$key) {
            $content .= ', ';
        }
    }
    $content .= ". Do take note!";
0 голосов
/ 06 ноября 2019

Простым решением будет

$content = "Your store, at location A, has these items added to them";
$array = array(0=>["product_name" => "abc", "product_sku" => "def"], 1=>['product_name' => 'kdkf', 'product_sku'=> 'ljbkj']);

for($i = 0; $i<count($array); $i++){
  $content .= ($i+1).") ".$array[$i]['product_name].' '.$array[$i]['product_sku'].', ';
}

$content .= "Do take note.";

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

не проверено, могут быть синтаксические ошибки

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