• 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

Aruba Cloud - Virtual Private Server VPS
0 głosów
559 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 (290,090 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 (256,600 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 (256,600 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ź 323 wizyt
pytanie zadane 6 kwietnia 2021 w JavaScript przez Oskar Szkurłat Bywalec (2,780 p.)
0 głosów
0 odpowiedzi 503 wizyt
pytanie zadane 2 września 2017 w PHP przez marcin99b Szeryf (84,170 p.)

93,335 zapytań

142,330 odpowiedzi

322,416 komentarzy

62,669 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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...