PHP array_sum

Pokec o čemkoliv ostatním
Message
Autor
Uživatelský avatar
_fantomas
Příspěvky: 118
Věk: 25
Registrován: 04 bře 2014, 23:05
Reputation: 0
Bydliště: Slovensko

PHP array_sum

#1 Příspěvekod _fantomas » 01 úno 2016, 13:33

Ahoj, viem že toto nie je programovacie fórum ale predsa len je to offtopic :)
Mám problém s PHP, potrebujem získať súčin hodnôt v poli.
Pole vyzera asi takto.

Kód: Vybrat vše

array(1) { [0]=> float(110.5) } array(1) { [0]=> float(12.9) }


Potrebuj spočítať 110.5 a 12.9 funkciou array_sum.
Problém je ale ten že mi to vypisuje chybu.

Kód: Vybrat vše

PHP Notice: Undefined offset: 1 in ...\htdocs\app\View\cart.phtml:24
2×   
PHP Warning: array_sum() expects parameter 1 to be array, null given in ...\htdocs\app\View\cart.phtml:24


Podľa chyby asi nemám kľúč/parameter ale vôbec si neviem dať rady.
Kód:

Kód: Vybrat vše


<?php
$results = DatabaseTool::fetchAll('SELECT * FROM `cart` WHERE `owner`=:owner', array(':owner' => USER_SESSION));
?>

    <?php foreach ($results as $result) : ?>
        <tr>
            <td><?=$result['id'];?></td>
            <td><?=$result['nameproduct'];?></td>
            <td><?=$result['price'];?> €</td>
            <td><?=$result['quantity'];?></td>
        </tr>
<?php

        $s = array($result["price"]);
        var_dump($s);
        echo array_sum($s);
endforeach
?>



Môže mi niekto prosím s tým pomôcť? :)

Uživatelský avatar
Hanakocz
Příspěvky: 3228
Věk: 32
Registrován: 25 črc 2013, 20:53
Reputation: 7
Kontaktovat uživatele:

Re: PHP array_sum

#2 Příspěvekod Hanakocz » 01 úno 2016, 14:53

Můj fungující kód:
[code=php file=Untitled.php] $sql = "SELECT pin_id, spis_id FROM oblibene WHERE user_id = :user_id";
$query = $this->db->prepare($sql) ;
$query->execute(array(':user_id' => $_SESSION['user_id']));
$seznam = $query->fetchAll();

kde

try {
$this->db = new Database();
} catch (PDOException $e) {
die('Database connection could not be established.');
}

je zaváděcí funkce na DB[/code]


Pro tvůj problém:
Ten můj kód pak pokračuje takto:
[code=php file=Untitled.php]if ($seznam)
{ foreach ($seznam as $key => $value)
{ $seznamarray[] = $value->spis_id;
...
}[/code]
Zkus taky to foreach obohatit o klíč => hodnotu , je to docela rozdíl a najednou dost věcí zvládá fungovat. Já bych to udělal nějak takto:
[code=php file=Untitled.php]
$soucet = 0;
foreach ($results as $key => $result)
{ $soucet = $soucet + $result->price;
}
echo $soucet;
[/code]
+ teda ten zbytek, co tam máš. Jen si musíš hlídat, aby všechno byly správné hodnoty, tedy čísla atp.

Nicméně: Dobrá rada: Odděl HTML a PHP(respektive PHP kód generující data a PHP kód generující HTML ), pokud možno. Zcela nejlepší je mít tydle funkce MIMO zobrazovací stránky, a jen jim lifrovat hodnoty. Ale pokud už chceš, aby ta daná stránka měla ten kód v sobě, tak to odděl. Na začátku dej PHP, kde bude celá funkce , ze který ti vypadnou hodnoty v proměnných, které is pak v druhém bloku jen zavoláš. Zpřehledníš tím kód.
Industry 2.0 -> 1.7.10 GregTech6 server. Pro připojení stačí napsat.
Člen ligy pro aktualizaci serverů na novější verze a rozšíření modovaného MC.
Discord FH : http://discord.fakaheda.eu/ (sem psát pokud chcete poradit s MC mody akutně)

Uživatelský avatar
_fantomas
Příspěvky: 118
Věk: 25
Registrován: 04 bře 2014, 23:05
Reputation: 0
Bydliště: Slovensko

Re: PHP array_sum

#3 Příspěvekod _fantomas » 01 úno 2016, 15:41

Vďaka, funguje mi to, a nemusíš ma poúčať o tom PHP s HTML, ja som to všetko nacapal do jedneho lebo v reále to mam všetko rozdele PHP od HTML
Síce som moc nepochopil ako to funguje ale funguje mi to :)

Uživatelský avatar
Hanakocz
Příspěvky: 3228
Věk: 32
Registrován: 25 črc 2013, 20:53
Reputation: 7
Kontaktovat uživatele:

Re: PHP array_sum

#4 Příspěvekod Hanakocz » 01 úno 2016, 15:45

Tak ono jde o to, že když dáš fetchAll, tak máš indexy řádků a indexy těch hodnot v řádku. kdybys dal jen fetch, tak máš jeden řádek a indexy těch hodnot.
No a to foreach říká, že pro každý řádek (key) vem ty hodnoty (value) a udělej s nima to a to a to...

Pokud bys tam dal jen to, jak jsi to měl, tak by to jelo jen po řádkách, nebo hodnotách, ale ty potřebuješ obojí. Ty jsi se vlastně odvolával na result[price], tedy na řádek číslo "prize", což je blbost.
Pak už to sčítání je trivální, vezmeš starou hodnotu, přidáš....a mnohem jasnější, než nějaký array_sum atd, tomu bych se radši vyhnul
Industry 2.0 -> 1.7.10 GregTech6 server. Pro připojení stačí napsat.
Člen ligy pro aktualizaci serverů na novější verze a rozšíření modovaného MC.
Discord FH : http://discord.fakaheda.eu/ (sem psát pokud chcete poradit s MC mody akutně)

Uživatelský avatar
Mysteria
Příspěvky: 9122
Registrován: 26 pro 2009, 15:40
Reputation: 7
Bydliště: Česká republika
Kontaktovat uživatele:

Re: PHP array_sum

#5 Příspěvekod Mysteria » 01 úno 2016, 18:41

Tak takhle vznikají ty prasárny v PHP, že ano?

Takže za prvé, array_sum vyžaduje array, tzn. něco jako:

Kód: Vybrat vše

$array = [10, 20, 30];
echo array_sum($array); // Vypíše 60

To co tam máš ty je blbost, správně by to bylo třeba takhle (variant je víc):

Kód: Vybrat vše

$array = array_merge($array, [$result["price"]]);
echo array_sum($array);

Nicméně, používat funkci pro takovéhle sčítání je sice možná pohodlný, ale bude mnohem pomalejší než normální for cyklus.

Taky jsem měl dřív místo for cyklů psát třeba array_map, protože je to relativně krátký, navíc to vypadá relativně hustě, ale když se podíváš na benchmarky, tak prakticky všechny funkce array_ něco jsou dost pomalé. Samozřejmě některé používám, protože array_walk_recursive by byl relativně složitej foreach, ale na jednoduchý věci se vyplatí klasickej cyklus.


Zpět na „Off topic“

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 28 hostů