Toon posts:

[php] Probleem met array index

Pagina: 1
Acties:

Verwijderd

Topicstarter
Dit stukje code als voorbeeld :

PHP:
1
2
3
4
$myarray = array( "een"=>"eerste waarde", "twee"=>"tweede waarde" );

echo( "Waarde van $myarray[1]  : " . $myarray[1] . "<br>\r\n"); // waarde niet gevonden
echo( "Waarde van $myarray[\"twee\"] : " . $myarray["twee"] . "<br>\r\n"); // deze werkt prima


Waarom kan ik dit array niet met zijn index benaderen ??

  • Elroy
  • Registratie: April 2000
  • Laatst online: 29-05 21:33

Elroy

Zelda!!!

Wat jij waarschijnlijk wilt is dit :

PHP:
1
2
3
4
$myarray = array( "eerste waarde", "tweede waarde" ); 

echo( "Waarde van $myarray[1]  : " . $myarray[1] . "<br>\r\n"); // waarde  gevonden 
echo( "Waarde van $myarray[\"twee\"] : " . $myarray["twee"] . "<br>\r\n"); // niet gevonden


Die van jouw zagen er zo uit :

$myarray[een] = eerste waarde
$myarray[twee] = tweede waarde

die van mij zien er zo uit

$myarray[0] = eerste waarde
$myarray[1] = tweede waarde

Specs Computer


Verwijderd

Topicstarter
PHP:
1
2
3
 <?
$myarray = array( "eerste waarde", "tweede waarde" );  
?>


Nu werkt de tweede echo() niet omdat het nu geen "associative" array is !

  • Elroy
  • Registratie: April 2000
  • Laatst online: 29-05 21:33

Elroy

Zelda!!!

Verwijderd schreef op 01 september 2002 @ 23:54:
PHP:
1
2
3
 <?
$myarray = array( "eerste waarde", "tweede waarde" );  
?>


Nu werkt de tweede echo() niet omdat het nu geen "associative" array is !
Nee nu werkt de 2 idd niet meer.
Het is of [1] of [een] of maak 2 array's :)

Specs Computer


Verwijderd

Topicstarter
Grapjas, twee array's is natuurlijk helemaal geen oplossing, dan een extra veld ....
Terugkomend op het probleem, ik weet zeker dat php intern een index gebruikt met waardes en zeker geen strings, dus wil ik die gebruiken en dan moet kunnen.

  • LEiPiE
  • Registratie: Juni 2001
  • Laatst online: 24-08 10:10

LEiPiE

... (ing. van weinig woorden)

Verwijderd schreef op 02 september 2002 @ 00:02:
Grapjas, twee array's is natuurlijk helemaal geen oplossing, dan een extra veld ....
Terugkomend op het probleem, ik weet zeker dat php intern een index gebruikt met waardes en zeker geen strings, dus wil ik die gebruiken en dan moet kunnen.
Denk dat je het toch niet helemaal zeker weet (ik ook niet :)), in de manual staat toch echt:
A key is either a nonnegative integer or a string.
PHP maakt er dus een strikte scheiding van, zodat bijvoorbeeld:
(he! die ' heb ik er niet in gezet :) is gewoon een apostrof, dat mag daar toch echt wel, naja :))
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
echo "<pre>\n";

print_r($anArray); 
echo "Element 0: '".$anArray[0]."' Element 1: '".$anArray[1]."' (unsorted)\n\n";
reset($anArray);

asort($anArray);
reset($anArray);
print_r($anArray);
echo "Element 0: '".$anArray[0]."' Element 1: '".$anArray[1]."' (sort on value)\n\n";
reset($anArray);

ksort($anArray, SORT_REGULAR);
reset($anArray);
print_r($anArray);
echo "Element 0: '".$anArray[0]."' Element 1: '".$anArray[1]."' (regular sort on key)\n\n";
reset($anArray);

ksort($anArray, SORT_NUMERIC);
reset($anArray);
print_r($anArray);
echo "Element 0: '".$anArray[0]."' Element 1: '".$anArray[1]."' (numeric sort on key)\n\n";
reset($anArray);

ksort($anArray, SORT_STRING);
reset($anArray);
print_r($anArray);
echo "Element 0: '".$anArray[0]."' Element 1: '".$anArray[1]."' (string sort on key)\n\n";
reset($anArray);

echo "</pre>\n";


output:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
Array
(
    [een] => eerste
    [twee] => tweede
    [0] => of toch echt nul
    [1] => eerste (nu echt)
    [01] => niet eerste
    [drie] => derde
)
Element 0: 'of toch echt nul' Element 1: 'eerste (nu echt)' (unsorted)

Array
(
    [drie] => derde
    [een] => eerste
    [1] => eerste (nu echt)
    [01] => niet eerste
    [0] => of toch echt nul
    [twee] => tweede
)
Element 0: 'of toch echt nul' Element 1: 'eerste (nu echt)' (sort on value)

Array
(
    [drie] => derde
    [een] => eerste
    [0] => of toch echt nul
    [1] => eerste (nu echt)
    [01] => niet eerste
    [twee] => tweede
)
Element 0: 'of toch echt nul' Element 1: 'eerste (nu echt)' (regular sort on key)

Array
(
    [drie] => derde
    [een] => eerste
    [0] => of toch echt nul
    [twee] => tweede
    [1] => eerste (nu echt)
    [01] => niet eerste
)
Element 0: 'of toch echt nul' Element 1: 'eerste (nu echt)' (numeric sort on key)

Array
(
    [0] => of toch echt nul
    [01] => niet eerste
    [1] => eerste (nu echt)
    [drie] => derde
    [een] => eerste
    [twee] => tweede
)
Element 0: 'of toch echt nul' Element 1: 'eerste (nu echt)' (string sort on key)


Functietje:
PHP:
1
2
3
4
5
6
7
8
9
function convertAssocToIndexed($anArray) {
   $outArray = array();
   reset($anArray);
   while ($temp = each($anArray)) {
      array_push($outArray, $temp[1]);
   }
   reset($outArray);
   return $outArray;
}

Daarmee kun je ze omzetten (bijvoorbeeld).
Aargh, marcusk was slimmer >:) array_values doet precies 't zelfde :)

(gebruik 't ook nooit echt :))

[ Voor 0% gewijzigd door LEiPiE op 02-09-2002 00:54 . Reden: voorbeeld(je) toegevoegd ]

Papa x3, PHP-progger, Citrofiel, import-Tukker, muziekliefhebber


  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Verwijderd schreef op 02 september 2002 @ 00:02:
Terugkomend op het probleem, ik weet zeker dat php intern een index gebruikt met waardes en zeker geen strings, dus wil ik die gebruiken en dan moet kunnen.
Nope, PHP slaat het op dmv een hashtable. Je zult array_values moeten gebruiken bij een asoc. array als je ook int's als indices wilt.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

lijkt mij op zijn minst frappant, dat je dit uberhaupt wilt... Zou je me een beetje kunnen vertellen waarom je dit eigenlijk wilt? :)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Topicstarter
Waarom ik dat wil : b.v.

PHP:
1
2
3
$myarray = array( "een"=>"eerste waarde", "twee"=> "tweede waarde" );  

echo( $myarray["twee"] ); // geeft de waarde : tweede waarde


Als ik nu het volgende wil doen dan gaat dat mis :"

PHP:
1
2
3
4
for( $i=0; $i < count( $myarray ); $i ++ )
{
   echo ( $myarray[$i] );
}

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

In dat geval, zou ik je graag even verwijzen naar de foreach control structure.

Deze loopt alle elementen in een array op een soortgelijke manier af:
PHP:
1
2
3
4
5
6
7
8
$array = array ( 'a' => 'een', 'b' => 'twee' );
foreach ( $array as $value ) {
   echo $value;
}

foreach ( $array as $key => $value ) {
   $array [ $key ] = $value . ' blaat';
}

* drm had al zo'n flauw vermoeden... ;)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz

Pagina: 1