/ 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
Kan man opdage hvis man har 2 ens keys ?
Fra : scootergrisen


Dato : 15-06-11 03:36

Hvis nu har ved en fejl kommer til at skrive 2 ens keys i et
assosiativt array så komme den sidste key jo til at overskrive den
første så der kun er 1 key ved det navn i arrayet som her :

$data = array(
'hej' => 'abc'
,'hej' => '123'
);

Det giver ikke nogen fejlbesked.

Findes der en måde hvor på jeg kan opdage sådanne dobbelt keys sådan
at jeg kan få en fejl besked så jeg kan rette det ?

 
 
Birger Sørensen (15-06-2011)
Kommentar
Fra : Birger Sørensen


Dato : 15-06-11 11:30

scootergrisen udtrykte præcist:
> Hvis nu har ved en fejl kommer til at skrive 2 ens keys i et
> assosiativt array så komme den sidste key jo til at overskrive den
> første så der kun er 1 key ved det navn i arrayet som her :
>
> $data = array(
> 'hej' => 'abc'
> ,'hej' => '123'
> );
>
> Det giver ikke nogen fejlbesked.
>
> Findes der en måde hvor på jeg kan opdage sådanne dobbelt keys sådan
> at jeg kan få en fejl besked så jeg kan rette det ?

Sådan som du skriver det, er det ikke muligt.
Du kan bruge
http://dk.php.net/manual/en/function.array-key-exists.php
inden du assigner, men der er ikke noget automatik, der kan give dig en
fejl.

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Leif Neland (16-06-2011)
Kommentar
Fra : Leif Neland


Dato : 16-06-11 13:00


> "scootergrisen" <scootergrisen@gmail.com> skrev i en meddelelse
> news:4d65805e-c773-49b5-b6d4-75a5c80c246f@k16g2000yqm.googlegroups.com...
> Hvis nu har ved en fejl kommer til at skrive 2 ens keys i et
> assosiativt array så komme den sidste key jo til at overskrive den
> første så der kun er 1 key ved det navn i arrayet som her :
>
> $data = array(
> 'hej' => 'abc'
> ,'hej' => '123'
> );
>
> Det giver ikke nogen fejlbesked.
>
> Findes der en måde hvor på jeg kan opdage sådanne dobbelt keys sådan
> at jeg kan få en fejl besked så jeg kan rette det ?

Man *kunne* tænke sig at det kunne fanges, hvis man havde den samme key
flere gange i samme array()-sætning.

$dyr('navn' => 'Lotte','navn'=>'pony');
i stedet for
$dyr('navn' => 'Lotte','art'=>'pony');

Men det er kun dig, der kan vide om

$dyr = array ('navn' => 'Lotte'};
$dyr['navn'] ='pony';

er en fejl, og du mente

$dyr = array ('navn' => 'Lotte'};
$dyr['art'] ='pony';

Så skulle du lave en add_key($array,$key,$value), der gav en fejl, hvis $key
eksisterede og
update_key($array,$key,$value), der gav en fejl, hvis $key *ikke*
eksisterede,

Leif



scootergrisen (17-06-2011)
Kommentar
Fra : scootergrisen


Dato : 17-06-11 04:40

> Man *kunne* t nke sig at det kunne fanges, hvis man havde den samme key
> flere gange i samme array()-s tning.
>
> $dyr('navn' => 'Lotte','navn'=>'pony');

Ja det netop sådan at de sætte i samme sætning.

Kunne godt lave en add_key() funktion som så tester og keyen findes
først det kræver bare jeg skal ændre min kode en del så ville
fortrække den anden løsning hvor PHP kan give fejl hvis samme key
bruges i samme sætning mere end 1 gang.

Med et ikke associativt array kan man vist gøre sådan her :

$input = array(4, "4", "3", 4, 3, "3");
$result = array_unique($input);

if($input != $result){
trigger_error('fejl');
}

Men det virker vist ikke på assosiativt arrays med key=>value par.

Birger Sørensen (17-06-2011)
Kommentar
Fra : Birger Sørensen


Dato : 17-06-11 12:11

scootergrisen kom med følgende:
>> Man *kunne* t nke sig at det kunne fanges, hvis man havde den samme key
>> flere gange i samme array()-s tning.
>>
>> $dyr('navn' => 'Lotte','navn'=>'pony');
>
> Ja det netop sådan at de sætte i samme sætning.
>
> Kunne godt lave en add_key() funktion som så tester og keyen findes
> først det kræver bare jeg skal ændre min kode en del så ville
> fortrække den anden løsning hvor PHP kan give fejl hvis samme key
> bruges i samme sætning mere end 1 gang.
>
> Med et ikke associativt array kan man vist gøre sådan her :
>
> $input = array(4, "4", "3", 4, 3, "3");
> $result = array_unique($input);
>
> if($input != $result){
> trigger_error('fejl');
> }
>
> Men det virker vist ikke på assosiativt arrays med key=>value par.

Det giver unike values - ikke keys, som du er ude efter.
PHP kan ikke vide, om du når du angiver en værdi for en key, virkelig
mener, at den key der bliver anvendt skal overskrive en eksisterende,
eller indsætte en ny. Så PHP kan ikke fange dine stavefejl for keys.

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Leif Neland (23-06-2011)
Kommentar
Fra : Leif Neland


Dato : 23-06-11 13:16


>"scootergrisen" <scootergrisen@gmail.com> skrev i en meddelelse
>news:16d2fd67-61db-4a6f-9097-b234b65c2c2d@q30g2000yqb.googlegroups.com...
>> Man *kunne* t nke sig at det kunne fanges, hvis man havde den samme key
>> flere gange i samme array()-s tning.
>>
>> $dyr('navn' => 'Lotte','navn'=>'pony');

>Ja det netop sådan at de sætte i samme sætning.

Det kan fanges, hvis man laver et script til at læse og analysere php-koden,
med f.ex. en regexp.

Men det skal køres på sourcen, gerne før den uploades til webserveren.

Det kunne sikkert klares i en smart editor som emacs.




Martin (17-06-2011)
Kommentar
Fra : Martin


Dato : 17-06-11 14:40

On 15-06-2011 11:35, scootergrisen wrote:
> Hvis nu har ved en fejl kommer til at skrive 2 ens keys i et
> assosiativt array så komme den sidste key jo til at overskrive den
> første så der kun er 1 key ved det navn i arrayet som her :
>
> $data = array(
> 'hej' => 'abc'
> ,'hej' => '123'
> );
>
> Det giver ikke nogen fejlbesked.
>
> Findes der en måde hvor på jeg kan opdage sådanne dobbelt keys sådan
> at jeg kan få en fejl besked så jeg kan rette det ?

add2array(array &$array, $key, $value) {
if (array_key_exists($key, $array) && $array[$key] != $value) {
trigger_error('Key: ' . $key . ' eksisterer allerede', E_USER_NOTICE);
}

$array[$key] = $value;

}


$myarray = array(1,2,3,4,5);
add2array($myarray, 0, 10);
// Notice

add2array($myarray, 0, 1);
// Ingen notices

$myarray = array(1,2,3,4,5);
add2array($myarray, 6, 50);
$myarray = Array [ 0 => 1, 1 => 2, 2 => 3, 3 => 4, 4 => 5, 6 => 50 ]

scootergrisen (24-06-2011)
Kommentar
Fra : scootergrisen


Dato : 24-06-11 03:13

Ok det lader til jeg skal lave min egen funktion for at klare det
hvilket jo heller ikke er det store problem.
Tænkte bare at der måske være en indbygget måde for PHP at opdage
sådan noget.
Men ja PHP ved jo ikke om jeg gør det med vilje kan man jo godt sige.

Tak for jeres svar.

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste