• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed łączenie zmiennych typu array w pętli foreach PHP

Object Storage Arubacloud
0 głosów
328 wizyt
pytanie zadane 22 września 2022 w PHP przez NoteDS Użytkownik (560 p.)
zamknięte 23 września 2022 przez NoteDS

Cześć potrzebuję wypisać dane z tabeli do jednej zmiennej w formacie json, zmienna ustalona przez foreach wyświetla tylko ostatnią wartość, więc wszystkie poprzednie produkty znikają z koszyka. Czy da się je jakoś dopisać zachowując array?

KOD:

 

foreach($_SESSION['shopping_cart'] as $key => $value)
{
    $items_in_cart++;
    $line_items_array = array(
      'price' => "{$value['product_stripe']}",
      'quantity' => "{$value['product_quantity']}",
           ); 
}

// $line_items_array wyświetla tylko ostatni produkt

dodając .= skrypt przestaje działać z błędem: 

Array to string conversion

stripe:


$checkout_session = \Stripe\Checkout\Session::create([

  'mode' => 'payment',
  'allow_promotion_codes' => true,

  'line_items' => [[$line_items_array]],

  'success_url' => '',
  'cancel_url' => '',
]);

 

komentarz zamknięcia: Rozwiązane

1 odpowiedź

+2 głosów
odpowiedź 22 września 2022 przez Arkadiusz Waluk Ekspert (288,330 p.)
wybrane 23 września 2022 przez NoteDS
 
Najlepsza

Jak sam zauważyłeś, w tym miejscu:

    $line_items_array = array(

nadpisujesz wartość tej zmiennej. Operator kropki służy do łączenia stringów, a nie tablic, stąd błąd o którym mówisz. Najprościej w tym przypadku byłoby użyć zapisu z [], który doda kolejny element do tablicy i będzie nim kolejna tablica składająca się z price i quantity.

    $line_items_array[] = array(

Samo array() z resztą też możesz zastąpić nawiasami kwadratowymi, to jest nowsza choć już od dawna istniejąca składnia. No i warto w tym momencie sprawdzić w Stripe jaka wartość powinna być przesyłana w line_items, bo jeśli utworzysz tablicę w której będą kolejne tablice z elementami (jak podałem) to mogę zgadywać, że wtedy w tym miejscu powinna być po prostu sama zmienna, bez zbędnego opakowywania tego w kolejne tablice.

komentarz 23 września 2022 przez VBService Ekspert (254,880 p.)

Możesz też użyć:  array_push

array_push($line_items_array, [
       'price' => "{$value['product_stripe']}",
    'quantity' => "{$value['product_quantity']}"
]);

 

1
komentarz 23 września 2022 przez NoteDS Użytkownik (560 p.)
edycja 23 września 2022 przez NoteDS

Dzi

komentarz 23 września 2022 przez VBService Ekspert (254,880 p.)
edycja 23 września 2022 przez VBService

Możesz zapisać np. tak

var_dump($line_items_array);

// lub

print_r($line_items_array);

// lub

foreach($line_items_array as $line_item)
    print_r($line_item);

// lub

echo '<pre>';
foreach($line_items_array as $line_item)
    foreach($line_item as $key => $value)
        echo $key . ': ' . $value . PHP_EOL;
echo '</pre>';

// lub

echo '<div class="line-items-container">';
foreach($line_items_array as $line_item) {
    echo '<div>';
    foreach($line_item as $key => $value)
        echo $key . ': ' . $value . ' ';
    echo '</div>';
}
echo '</div>';

// lub


/*
<style>
  thead tr {
    background-color: black;
    color: white;  
  }
  thead th {
    padding: 0.25em 1em;
    font: 500 1em/1.2 system-ui;
  }
  tbody td {
    text-align: center;
  }
  tbody tr {
    transition: all 300ms;
  }
  tbody tr:nth-child(odd) {
    background-color: rgba(0,0,0,0.4);
  }
  tbody tr:nth-child(even) {
    background-color: rgba(0,0,0,0.6);
  }
  tbody tr:hover {
    background-color: rgba(0,0,0,0.8);
    color: white;
  }
</style>
*/
$line_items_table = '<table>'
                  . '<thead>'
                  . '<tr><th>id</th><th>price</th><th>quantity</th></tr>'
                  . '</thead>'
                  . '<tbody>';
                  
foreach($line_items_array as $index => $line_item) {
    $line_items_table .= '<tr><td>' . ($index + 1) . '</td>';
    foreach($line_item as $value)
        $line_items_table .= '<td>' . $value . '</td>';
    $line_items_table .= '</tr>';
}

echo $line_items_table . '</tbody></table>';

 

 

Podobne pytania

+1 głos
1 odpowiedź 253 wizyt
pytanie zadane 6 kwietnia 2021 w JavaScript przez Oskar Szkurłat Bywalec (2,780 p.)
0 głosów
0 odpowiedzi 474 wizyt
pytanie zadane 2 września 2017 w PHP przez marcin99b Szeryf (82,260 p.)

92,757 zapytań

141,679 odpowiedzi

320,441 komentarzy

62,101 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...