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

Problem z tablicą PhP

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
316 wizyt
pytanie zadane 29 września 2022 w PHP przez MisticVoid Początkujący (490 p.)

Dzień dobry pisze ponieważ mam problem z pewna tablicą do której przypisuje randomowe numery. Chciałem je zsumować lecz coś nie wychodzi i wyskakuje taki błąd:  "Uncaught TypeError: array_sum(): Argument #1 ($array) must be of type array, int given in . . .". Oto kod:

        $a = [40];
        for($i=1; $i<=40; $i++){
            $rand = rand(1,30);
            $a = $rand;
            echo $a." ";
        }
        array_sum($a)
        

Proszę o pomoc i wytłumaczenie gdzie popełniłem błąd lub o czym zapomniałem. Z góry dziękuję za pomoc smiley.

3 odpowiedzi

+2 głosów
odpowiedź 29 września 2022 przez Velta Maniak (52,790 p.)

Zawartość zmiennej a nadpisujesz wielokrotnie przez generowane pseudolosowe liczby całkowite.

Jeżeli chcesz dodać element do tablicy – użyj funkcji array_push:

array_push($a, $rand);

Lub przez wywołanie bez indeksu:

$a[] = $rand;

 

+1 głos
odpowiedź 29 września 2022 przez wizarddos Nałogowiec (27,010 p.)

Sam błąd oznacza że przekazałeś funkcji int zamiast tablicy.

Dlaczego?

Przeanalizujmy ten kod

Dokładnie błąd to pewnie linia 4

$a = $rand;

Tutaj przypisujesz do $a wylosowany numer. Powtarzam przypisujesz, a nie dodajesz kolejny element tablicy

Możesz to zrobić np. tak

$a = array_push($a, $rand);

Albo tak

$a[i] = $rand

Wybór należy do ciebie

+1 głos
odpowiedź 29 września 2022 przez VBService Ekspert (256,320 p.)
edycja 30 września 2022 przez VBService

W php-ie nie ma wymogu podawania wielkości tablicy przy inicjalizacji.

Sprawdź Twój zapis  [ on-line ]

$a = [40];
var_dump($a);
echo $a[0];

ale można np. tak 

[ on-line ]

$a = array_fill(1, 40, 0);
print_r($a);

[ on-line ]

$a = [ 0 ];
$a = array_pad($a, 40, 0);
print_r($a);

 

a co do zapełnienia 40 elementowej tablicy liczbami losowymi z przedziału
1-30 można np. tak

[ on-line ]

$a = array_map(function() { return rand(1, 30); }, range(1, 40));
print_r($a);

 

propozycja poprawienia  [ on-line ]

for ($i=1; $i<=40; $i++) {
   $a[$i] = rand(1,30);
   echo "{$a[$i]} ";
}
echo array_sum($a);

 

 

array_fill ]  [ array_pad ]  [ array_map ]

Podobne pytania

0 głosów
1 odpowiedź 432 wizyt
pytanie zadane 8 grudnia 2020 w C i C++ przez Antytalent Początkujący (470 p.)
0 głosów
1 odpowiedź 375 wizyt
pytanie zadane 13 lutego 2019 w C i C++ przez Mateusz Chudek Nowicjusz (120 p.)

93,191 zapytań

142,206 odpowiedzi

322,041 komentarzy

62,518 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2817p. - dia-Chann
  2. 2769p. - Łukasz Piwowar
  3. 2759p. - Łukasz Eckert
  4. 2738p. - CC PL
  5. 2704p. - Tomasz Bielak
  6. 2678p. - Łukasz Siedlecki
  7. 2666p. - rucin93
  8. 2584p. - Adrian Wieprzkowicz
  9. 2536p. - Mikbac
  10. 2485p. - Marcin Putra
  11. 2418p. - Michal Drewniak
  12. 2239p. - Michał Telesz
  13. 2156p. - Anonim 3619784
  14. 1733p. - rafalszastok
  15. 1650p. - Mariusz Fornal
Szczegóły i pełne wyniki

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!

...