Toon posts:

[PHP] Numerieke index maken van associatieve array

Pagina: 1
Acties:
  • 41 views sinds 30-01-2008

Verwijderd

Topicstarter
Hoi, ik zoek een stuk code waarbij ik zo snel mogelijk van een element uit een associatieve array een index kan krijgen. Voorbeeld:

code:
1
2
3
4
5
6
7
8
9
10
11
12
$arr = array('een' => 'kees', 'twee' => 'miep', 'vijf' => 'huis');

// ik wil van 'een' 1 krijgen, van 'twee' 2, van 'vijf' 3. dus in de volgorde dat ze zijn toegevoegd, eigenlijk.

// nog een voorbeeld:

$arr2 = array();
$arr['test'] = 'wiejj';
$arr['lol'] = 3;
$arr['nee'] = 'ja';

// nu wil ik van $arr['test'] 1 krijgen, van $arr['lol'] 2, van $arr['nee'] 3... ik denk dat het wel duidelijk is.


Is dit uberhaupt mogelijk? :)

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
PHP:
1
array_keys($arr);

Verwijderd

Topicstarter
Die geeft dus alleen de key terug, maar ik wil per se een numerieke index terugkrijgen.

  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05-2025

GX

Nee.

ik kan zo niets bedenken dat efficient is.

je zou kunnen itereren en alles los in een nieuwe array proppen en kijken of dat werkt (even benchen)

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
voor grote arrays is dit niet erg snel. kijk zelf maar even welke van de 2 alternatieven sneller is:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?
$arr = array('een' => 'kees', 'twee' => 'miep', 'vijf' => 'huis');

$index = array_index_of_key($arr, "vijf");
echo $index;

function array_index_of_key($array, $key) {
    $keys = array_keys($array);
    foreach($keys as $n => $key2) {
        if($key == $key2) return $n;    
    }
    return null; 
}

function array_index_of_key_anders($array, $key) {
    $n = 0;
    foreach($array as $key2 => $value) {
        if($key == $key2) return $n;    
        $n++;
    }
    return null; 
}
?>


ps deze functie geven indices terug vanaf 0, dus niet wat jij zegt vanaf 1, maar dat bedoel je ook vast niet ;)

[ Voor 28% gewijzigd door Genoil op 18-07-2005 18:47 ]


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Verwijderd schreef op maandag 18 juli 2005 @ 18:08:
Hoi, ik zoek een stuk code waarbij ik zo snel mogelijk van een element uit een associatieve array een index kan krijgen. Voorbeeld:

code:
1
2
3
4
5
6
7
8
9
10
11
12
$arr = array('een' => 'kees', 'twee' => 'miep', 'vijf' => 'huis');

// ik wil van 'een' 1 krijgen, van 'twee' 2, van 'vijf' 3. dus in de volgorde dat ze zijn toegevoegd, eigenlijk.

// nog een voorbeeld:

$arr2 = array();
$arr['test'] = 'wiejj';
$arr['lol'] = 3;
$arr['nee'] = 'ja';

// nu wil ik van $arr['test'] 1 krijgen, van $arr['lol'] 2, van $arr['nee'] 3... ik denk dat het wel duidelijk is.


Is dit uberhaupt mogelijk? :)
Is de array
PHP:
1
2
3
4
$arr3 = array();
$arr['lol'] = 3;
$arr['test'] = 'wiejj';
$arr['nee'] = 'ja';
gelijk aan jouw arr2? En wat zou de waarde van $arr3['test'] dan moeten zijn? Anders dan die van $arr2['test'] ?

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

PHP:
1
2
3
4
5
6
7
8
9
10
11
$arr = array('een' => 'kees', 'twee' => 'miep', 'vijf' => 'huis');

$key = array_search('een', array_keys($arr));
echo $key; // 0
$key = array_search('twee', array_keys($arr)); 
echo $key; // 1
$key = array_search('vijf', array_keys($arr));
echo $key; // 2

$arr2 = array_values($arr);
print_r($arr2); // Array ( [0] => kees [1] => miep [2] => huis )

alleen zijn je indices dan 0-based

allemaal te vinden in de manual...

[ Voor 5% gewijzigd door crisp op 18-07-2005 18:49 ]

Intentionally left blank


  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
ja wat crisp zegt zal wel een stukje sneller zijn daar de functie dus min of meer wél in PHP gebakken zit.

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 21:50
Ik zou zeggen array_values() in combinatie met array_flip(). Dan heb je een array met de als key de waarde uit het originele array en als value de numrieke key (die begint op 0).

edit:
spuit 11 zal nog eens linkjes naar het manual maken ;)

[ Voor 12% gewijzigd door T-MOB op 18-07-2005 18:54 ]

Regeren is vooruitschuiven


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 15:47

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op maandag 18 juli 2005 @ 18:17:
[...]

Die geeft dus alleen de key terug, maar ik wil per se een numerieke index terugkrijgen.
So? Ga zelf aan de slag? Ik mis redelijk wat informatie in je startpost zoals de zaken die je zelf al hebt geprobeerd en wat daar niet mee lukte. Daarnaast is het zo te zien te vinden in de manual zoals Crisp al aangeeft. Check voor de volgende keer even P&W FAQ - De "quickstart" zodat je weet wat we eigenlijk van een topicstart verwachten.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1

Dit topic is gesloten.