• 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

0 głosów
37 wizyt
pytanie zadane 22 września w PHP przez NoteDS Użytkownik (560 p.)
zamknięte 23 września 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 przez Arkadiusz Waluk Ekspert (283,700 p.)
wybrane 23 września 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 przez VBService Mędrzec (186,940 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 przez NoteDS Użytkownik (560 p.)
edycja 23 września przez NoteDS

Dzi

komentarz 23 września przez VBService Mędrzec (186,940 p.)
edycja 23 września 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ź 71 wizyt
pytanie zadane 6 kwietnia 2021 w JavaScript przez Oskar Szkurłat Bywalec (2,730 p.)
0 głosów
0 odpowiedzi 279 wizyt
pytanie zadane 2 września 2017 w PHP przez marcin99b Maniak (74,630 p.)

89,127 zapytań

137,729 odpowiedzi

307,726 komentarzy

59,179 pasjonatów

Motyw:

Akcja Pajacyk

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

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...