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.
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'.
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..
isset?
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.
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ä.
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ä.
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?) ?>
Arrayn ulkoasu voi olla tämäntyyppinen:
Array ( [key] => "teksti" ) Array ( [key2] => "teksti" ) Array ( )
Ei tällainen:
Array ( [$key] => "teksti" )
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.
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)
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ä?
Aihe on jo aika vanha, joten et voi enää vastata siihen.