|
| 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.
| |
|
|