Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP 5 ja muuttujan tarkistus

Sivun loppuun

pistemies [01.01.2007 00:48:13]

#

Millä saan tarkistettua, että arrayn tietyn nimisessä arvossa on tavaraa ja myös sen, jos koko arrayta ei ole.

 if(is_array($list)){
   if(is_string($list[key])){
    echo "OK";
 }
}

Miten saan tuon toimimaan tilanteessa, jossa arrayta/avainta ei ole?

Nyt se moittii tähän tapaan:
Notice: Use of undefined constant key - assumed 'key' in C:\Ohjelmatiedostot\.....\index.php on line 35

Funktiolla empty tekee tuon saman.

tsuriga [01.01.2007 00:57:06]

#

Mikähän tämä "key" on? Muuttuja ($key)? Vakio (KEY suositellusti isoilla kirjaimilla)? Suomennos: "Huomautus: Käytetty tuntematonta vakioavainta - oletettiin 'key' in..", ts. et ole määritellyt vakiota nimeltä 'key'.

pistemies [01.01.2007 01:09:47]

#

tsuriga kirjoitti:

Mikähän tämä "key" on? Muuttuja ($key)? Vakio (KEY suositellusti isoilla kirjaimilla)? Suomennos: "Huomautus: Käytetty tuntematonta vakioavainta - oletettiin 'key' in..", ts. et ole määritellyt vakiota nimeltä 'key'.

Kyseessä on arrayn avaimen nimi. Ja tämä on array, joka välistä on olemassa ja välillä ei, riippuen sivulla liikkujan toimista. Avainten nimet voi myös vaihdella samasta syystä.

Eli miksi tuo if-lause ei riitä tuohon? Php 5 olettaa, että tuo on oltava olemassa, vaikka if-lause jättää päinvastaisen vaihtoehdon. Toimii kuitenkin oikein tuohon is_array -funktioon...tai osittain... ei moiti sitä. Mutta siinäkin on ehkä toimimattomuutta, koska siirtyy tuon silmukan sisään.

Onko järkeä käyttää näin:

if(is_array($list)){
   if(@is_string($list[key])){
    echo @list[key];
 }
}

Tämä ei herjaa mitään..

Niko [01.01.2007 01:26:28]

#

isset?

pistemies [01.01.2007 01:33:55]

#

Niko kirjoitti:

isset?

Jos laitan tuon is_stringin tilalle isset, sivu näyttää tyhjää. Mitä taas tulee tuohon is_array-funktioon, niin isset toimii siihen. Is_array on siitä hyvä, että se hyväksyy vain arrayn.

tsuriga [01.01.2007 02:04:50]

#

<?php
if (isset($arr[$key]) && is_string($arr[$key]))
?>

Jos tuo avain 'key' kerran vaihtelee niin käytetään siinä sitä ilmoittamaan muuttujaa, ei vakiota. Tuo huomautus kyllä kovasti vihjaisi, että yrität syöttää taulukolle vakiota avaimeksi. @ supistaa kaiken maailman virheviestit ja huomautukset, joten on luonnollista, ettei silloin tule virhettä.

pistemies [01.01.2007 02:22:40]

#

Jes. Oikea muoto pitää olla tämä.

if(is_array($list)){
   if(@is_string($list['key'])){
    echo @list['key'];
 }
}

Mutta edelleen tarvitaan tuota @-merkkiä. Tämä moittii ilman @-merkkiä vakion sijasta "index" iä.

tsuriga [01.01.2007 02:42:53]

#

Kts. yltä oikea muoto, ja lue selvennystä muuttujiin, vakioihin ja merkkijonoihin vaikkapa Putkan oppaasta tai mureakuhan wikistä. Perusteittain näin:

<?php
'key' // merkkijono
$key // muuttuja
key // vakio (vakiot eri värillä koodiväritykseen?)
?>

pistemies [01.01.2007 14:38:39]

#

Arrayn ulkoasu voi olla tämäntyyppinen:

Array
(
    [key] => "teksti"
)
Array
(
    [key2] => "teksti"
)
Array
(
)

Ei tällainen:

Array
(
    [$key] => "teksti"
)

tsuriga [01.01.2007 14:42:20]

#

Tahdot siis käyttää vakiota taulukon avaimena. Vakiot on yleensä tapana kirjoittaa isoilla kirjaimilla. Kyllähän tuo toimii, pitäisi tietää enemmän tilanteesta, jotta voisi sanoa, onko se nyt sitten kannattavaa.

Niko [01.01.2007 14:44:35]

#

define('key', 'avain2');
$key = 'avain';
$array[$key] = 'moi';
$array[key] = 'terve';
$array['key'] = 'hei';
array
(
   'avain' => 'moi',
   'avain2' => 'terve'
   'key' => 'hei'
)

joko ymmärrät mikä ero on key, 'key' ja $key?

(Mod. edit: kooditagit)

pistemies [01.01.2007 15:35:53]

#

Niko kirjoitti:

joko ymmärrät mikä ero on key, 'key' ja $key?

Joo-o. Ei tuossa ymmärryksessä mitään vikaa ole. Ohjelma tekee tuollaisen arrayn lennossa ilman, että voi muokata itse arraysta muuta kuin nimen, $list. Vai voiko tuon arrayn avaimet muuttaa jollakin funtiolla toisenlaiseksi tuosta alkuperäisestä?


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta