Autor Zpráva
m_stehlik
Profil
Vsechny zdravim,
poradte nekdo prosim, jak secist vsechny prvky v array, kdyz pod php 3.0.18 neni podporavana funkce array_sum. Ladil jsem to pod php 4.3.3.0 tam je vse oka po nahrani na ostry server to hlasi:
Fatal error: Call to unsupported or undefined function array_sum() in include/order_velko.inc.php.
Jeste jedna otazka - umela tato verze mysql_fetch_assoc?
m_stehlik
Profil
Na prvni cast si odpovim sam:
for ($p = 0; $p < count($suma_cen); ++$p){
$sumar=$sumar+$suma_cen[$p];
}
staci pouzit to co mam na krku....
Oswald
Profil
poradte nekdo prosim, jak secist vsechny prvky v array, kdyz pod php 3.0.18 neni podporavana funkce array_sum.


if (!function_exists('array_sum')) {
function array_sum($array) {
$sum = 0;
foreach ($array as $value) {
if (is_numeric($value)) {
$sum += $value;
}
}
return $sum;
}
}


Nejsem si jistý, jestli trojka umí podmíněné definice funkcí.

Jeste jedna otazka - umela tato verze mysql_fetch_assoc?

Skoro se mi chce říct rtfm :-)

mysql_fetch_assoc
(PHP 4 >= 4.0.3, PHP 5)
error414
Profil
m_stehlik
To jeste nekde bezi php3???
jozob
Profil

if(!function_exists("array_sum"))
{
function array_sum($pole)
{
if(is_array($pole))
{
$sucet=0;
foreach($pole as $hodnota)
{
$sucet+=$hodnota;
}
}
else
{
$sucet=false;
}
return $sucet;
}
}

jozob
Profil
Tak neskoro :-)
error414
Profil
foreach($pole as $hodnota)
je v php 3???

citace php.net
PHP 4 introduced a foreach construct, much like Perl and some other languages.
jozob
Profil
error414
Takže ak nie je foreach v PHP3, v skripte sa dá nahradiť použitím cyklu for.
if(!function_exists("array_sum"))

{
function array_sum($pole)
{
if(is_array($pole))
{
$sucet=0;
$pocet=count($pole);
for($i=0; $i<$pocet; $i++)
{
$sucet+=$hodnota;
}
}
else
{
$sucet=false;
}
return $sucet;
}
}
error414
Profil
jozob
Ale tady to narazi na omezeni posloupnosti, prvky v poli nesmi byt prerusene.
PHP3 sux
jozob
Profil
Zabudol som v tom kóde ešte jednu vec upraviť, takže takto:
if(!function_exists("array_sum"))

{
function array_sum($pole)
{
if(is_array($pole))
{
$sucet=0;
$pocet=count($pole);
for($i=0; $i<$pocet; $i++)
{
$sucet+=$pole[$i];
}
}
else
{
$sucet=false;
}
return $sucet;
}
}
Oswald
Profil
jozob
Přidal bych tam ještě tu kontrolu, jestli je $hodnota číslo (viz ta moje sum_array), protože jakmile tam bude objekt nebo pole, tak: "Fatal error: Unsupported operand types in ...".
error414
Profil
Oswald
jozob
To je prace ladeni kodu pro php3, aspon vite jak to meli tezke
jozob
Profil
Oswald
Jasné. A mohli by sme tam pridať aj nenumerické stringy, to by malo ísť, nie?. Takže časť kódu, kde sa pričpočítava hodnota poľa k celkovému výsledku($sucet+=$pole[$i];) by sa mohla upraviť nasledovne:
if(is_string($pole[$i]) || is_numeric($pole[$i]))

{
$sucet+=$pole[$i];
}
jozob
Profil
error414
Ale nerozumiem, prečo ešte niekde používajú PHP3. Veď trojka je stará takmer 9 rokov. (PHP3 bola nástupcom PHP/FI)
Oswald
Profil
jozob

Pokud ti jde o to, aby se přičetlo např. i $array[0] = '+5' (tedy číslo, ale string), tak to přes is_numeric projde (typ kontroluje is_int).
jozob
Profil
Oswald
Ja viem. Ale mne išlo o "nenumerické stringy" ako som uviedol, čiže napríklad: $array[0]="a".
Oswald
Profil
jozob
Aha, ale k čemu je (v tomto případě) dobré, přičítat string k číslu?
jozob
Profil
Oswald
Ani nemyslím že len string. Podmienka by sa mala dokonca upraviť, aby to zobralo všetko, okrem array a object.

Funkcie musíš vyrábať tak, aby v nich prešlo čo najviac možných vstupov. V pôvodnej, v PHP4 definovanej funkcii array_sum() prejde všetko.
Oswald
Profil
jozob
Máš pravdu. Naivně jsem si myslel, že array_sum zkonvertuje na čísla jenom ty stringy, na které by is_numeric vrátila true a že např. array_sum(array(5, 10, '1. kapitola')) vrátí 15...

Funkcie musíš vyrábať tak, aby v nich prešlo čo najviac možných vstupov.

Nemusím ;-) Vstupy se naopak snažím co nejvíce filtrovat.

http://1.cz/index.php?q[]=
http://jyxo.cz/s?q[]=
m_stehlik
Profil
Panove,
vsem dekuji za zajem a vycerpavajici informace. Tohle php jede ve spojeni s MySQL 4.1.13, jadro Linuxu 2.6 na jednom holandskem serveru. A pak ze jsme tady 100 let za opicema.
Jinak co se tyka testovani jestli je promenna pole atd (dekuji jozobovi) to probehne hned na zacatku scriptu (tedy jeste spousta jinych testu), tohle je jen vypocet konecne hodnoty.
Jeste jednou dekuji.
Michal
jozob
Profil
Oswald
> "Nemusím ;-) Vstupy se naopak snažím co nejvíce filtrovat."
- Vstupy môžeš filtrovať koľko chceš (na tom veľmi nezáleží), ale funkcie by si mal vytvárať (hodil by sa sem anglický výraz should) také, aby pracovali intuitívne, teda tak aby si bez nahladnutia do zdrojáku funkcie mohol s istotou predpokladať ako sa funkcia správa.

m_stehlik
> "jadro Linuxu 2.6"
- Najnovšie jadro.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0