/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Bedste måde at få NULLs til 0 i array
Fra : YJ


Dato : 09-04-06 12:10

Jeg har et array, som indeholder nogle tal og nogle NULLs.

Jeg ønsker at få alle NULLs til at være 0.

Det kan jeg klare på denne måde:


for ($a=0; $a<count($arr_Return); $a++)
{
if ($arr_Return [$a] == False) $arr_Return [$a] = 0;
}

Men er der mon ikke en smartere måde?

YJ



 
 
Erlend Klakegg Bergh~ (09-04-2006)
Kommentar
Fra : Erlend Klakegg Bergh~


Dato : 09-04-06 12:19

YJ skrev:
> Jeg har et array, som indeholder nogle tal og nogle NULLs.
>
> Jeg ønsker at få alle NULLs til at være 0.
>
> Det kan jeg klare på denne måde:
>
>
> for ($a=0; $a<count($arr_Return); $a++)
> {
> if ($arr_Return [$a] == False) $arr_Return [$a] = 0;
> }
>
> Men er der mon ikke en smartere måde?

for($a=0; $a<count($arr_Return); $a++)
{
$arr_Return[$a] = is_null($arr_Return[$a]) ? 0 : $arr_Return[$a];
}

Man kommer seg ikke så lett utenom, da det såvidt jeg vet ikke finnes
noen metode i PHP som gjør det for oss, men når vi først skal gjøre det
må vi i det minste gjøre det riktig. "false" og "null" er ikke det
samme, og bør ikke behandles som det samme heller. :)

I min kode kunne man snudd om og spurt om det er et tall:

for($a=0; $a<count($arr_Return); $a++)
{
$arr_Return[$a] = is_int((int) $arr_Return[$a]) ? (int)
$arr_Return[$a] : 0;
}

Skal vi se på korrektheten av kode, så er det siste eksempelet det
beste, for da vet du helt sikkert at $arr_Return består av _kun_ tall.
(Det kunne jo sneket seg inn en string eller noe annet stygt... ;)

Du må forandre til float hvis du er interessert i noe annet enn kun heltall.

http://php.net/is_null
http://php.net/is_int
http://php.net/is_float

--

Vennlig hilsen

Erlend Klakegg Bergheim

Erlend Klakegg Bergh~ (09-04-2006)
Kommentar
Fra : Erlend Klakegg Bergh~


Dato : 09-04-06 12:21

Erlend Klakegg Bergheim skrev:
> YJ skrev:
>> Jeg har et array, som indeholder nogle tal og nogle NULLs.
>>
>> Jeg ønsker at få alle NULLs til at være 0.
>>
>> Det kan jeg klare på denne måde:
>>
>>
>> for ($a=0; $a<count($arr_Return); $a++)
>> {
>> if ($arr_Return [$a] == False) $arr_Return [$a] = 0;
>> }
>>
>> Men er der mon ikke en smartere måde?
>
> for($a=0; $a<count($arr_Return); $a++)
> {
> $arr_Return[$a] = is_null($arr_Return[$a]) ? 0 : $arr_Return[$a];
> }
>
> Man kommer seg ikke så lett utenom, da det såvidt jeg vet ikke finnes
> noen metode i PHP som gjør det for oss, men når vi først skal gjøre det
> må vi i det minste gjøre det riktig. "false" og "null" er ikke det
> samme, og bør ikke behandles som det samme heller. :)
>
> I min kode kunne man snudd om og spurt om det er et tall:
>
> for($a=0; $a<count($arr_Return); $a++)
> {
> $arr_Return[$a] = is_int((int) $arr_Return[$a]) ? (int)
> $arr_Return[$a] : 0;
> }
>
> Skal vi se på korrektheten av kode, så er det siste eksempelet det
> beste, for da vet du helt sikkert at $arr_Return består av _kun_ tall.
> (Det kunne jo sneket seg inn en string eller noe annet stygt... ;)
>
> Du må forandre til float hvis du er interessert i noe annet enn kun
> heltall.
>
> http://php.net/is_null
> http://php.net/is_int
> http://php.net/is_float
>

Det ble noe mye int her... Slik skal det være:

for($a=0; $a<count($arr_Return); $a++)
{
$arr_Return[$a] = is_int($arr_Return[$a]) ? (int)
$arr_Return[$a] : 0;
}

--

Vennlig hilsen

Erlend Klakegg Bergheim

Peter Brodersen (09-04-2006)
Kommentar
Fra : Peter Brodersen


Dato : 09-04-06 14:30

On Sun, 9 Apr 2006 13:09:54 +0200, "YJ" <sdf@dsf.sdf> wrote:

>Jeg har et array, som indeholder nogle tal og nogle NULLs.

Hvis man er til uoverskuelige one-liners:

$a = array_map(create_function('$i','return is_null($i)?0:$i;'),$a);

... hvor $a er dit array.

--
- Peter Brodersen
Find dig selv: http://map.ter.dk/

Bent Stigsen (10-04-2006)
Kommentar
Fra : Bent Stigsen


Dato : 10-04-06 18:56

YJ wrote:
> Jeg har et array, som indeholder nogle tal og nogle NULLs.
>
> Jeg ønsker at få alle NULLs til at være 0.
>
> Det kan jeg klare på denne måde:
>
>
> for ($a=0; $a<count($arr_Return); $a++)
> {
> if ($arr_Return [$a] == False) $arr_Return [$a] = 0;
> }
>
> Men er der mon ikke en smartere måde?

Hvis dit array er stort, så er det bedst at undgå gentagne gennemløb,
og håndtere det et sted hvor du alligevel har fat i værdierne.

Fx. hvis du indlæser fra database, kan du håndtere det i sql'en med
"ifnull", ala "select x, y, ifnull(z,0) z from ..."

Eller evt. bruge explicit cast kun der hvor du skal bruge værdien, ala
(int)$arr_Return[...] eller printf("%d",$arr_Return[...]).


/Bent

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste