PHP Array Key bei 2-dimensionalen Arrays

QuHno

Außer Betrieb
Hab ein PHP Array Problem, evtl, kennt ja jemand die Lösung oder kann mir die passende Stelle im Manual verlinken, hab es leider nicht selbst gefunden:

Ich habe viele kleine Arrays, die alle gleich aufgebaut sind.
Diese möchte ich in ein größeres Array einbauen, so dass es ein 2-dimensionales wird, soweit kein Problem.

Nun das Problem:
Wie setze ich den jeweiligen Namen des Keys im äußeren Array auf den jeweiligen Wert von Element[0] des inneren Arrays?


Also nicht so wie in dieser print_r Ausgabe:

Code:
Array
(
    [0] => Array
        (
            [0] => test1
            [1] => 3
            [2] => 4
        )

    [1] => Array
        (
            [0] => test2
            [1] => a
            [2] => 2
        )
)

sondern so:

Code:
Array
(
    [test1] => Array
        (
            [0] => test1
            [1] => 3
            [2] => 4
        )

    [test2] => Array
        (
            [0] => test2
            [1] => a
            [2] => 2
        )
)

... ist wahrscheinlich trivial, aber ich bin irgendwie vernagelt und komme nicht auf die Lösung ...
 
Sorry, habe mich verlesen, ich grübel mal nach.

Ich melde mich gleich mal per ICQ bei Dir.


verborgener Text:
Klickediklack

Das Erste Beispiel zeigt bereits, wie Du die Indizes benennen kannst.
PHP:
<?php
$arr = array("foo" => "bar", 12 => true);

echo $arr["foo"]; // bar
echo $arr[12];    // 1
?>

Hinter den Pfeilen kannst du dann die zweiten Dimensionen der Arrays definieren statt einen Inhalt festzulegen.
Dies wird im zweiten Beispiel gezeigt:
PHP:
<?php
$arr = array("somearray" => array(6 => 5, 13 => 9, "a" => 42));

echo $arr["somearray"][6];    // 5
echo $arr["somearray"][13];   // 9
echo $arr["somearray"]["a"];  // 42
?>
 
Zuletzt bearbeitet:
OK, dann noch ein paar Infos:
Hab eine Tab delimited List namens blah.db

die ist so aufgebaut:
Code:
test2	a	2
test1	3	4

derzeit lese ich die so ein:

PHP:
function array_lesen($file)
{ 
	$dbRaw = @file($file);
	if($dbRaw)
	{
		sort($dbRaw);
		$dbSize = count($dbRaw);
		for($i=0;$i<$dbSize;$i++)
		{
			$dbExploded[$i] = explode("\t",trim($dbRaw[$i]));
		}
	}
	return $dbExploded;
}

$test = array_lesen('blah.db');
print_r($test);
und dann kommt das Erste oben raus. Ich hätte aber gerne das Zweite ...


edit:
Gelöst!
Manchmal hilft es, wenn man noch mal mit der Nase auf die richtige Stelle im Manual gestubst wird (hatte die gelesen, aber anscheinend nicht richtig, sorry!)

So funktioniert's:
PHP:
function array_lesen($file)
{ 
	$dbRaw = @file($file);
	if($dbRaw)
	{
	sort($dbRaw);
		$dbSize = count($dbRaw);
		for($i=0;$i<$dbSize;$i++)
		{
			$line = explode("\t",trim($dbRaw[$i]));
			$key = $line[0];
			$dbExploded[$key] = $line;
		}
	}
	return $dbExploded;
}
man kann die Schleife natürlich noch verkürzen, indem man sie so schreibt:
PHP:
		for($i=0;$i<$dbSize;$i++)
		{
			$line = explode("\t",trim($dbRaw[$i]));
			$dbExploded[($line[0])] = $line;
		}
Die Klammern um $line[0] sind wichtig, sonst gibt's Fehlermeldungen (bin ich auch rein gerauscht) :)


Wenn jemand einen eleganteren Weg kennt: Bitte hier posten, speziell wenn der Code schneller ausgeführt wird, der hier ist ziemlich lahhm, wenn das Array groß wird ... *1)

edit2:
Ich dohf :insane

"Lesen bildet 1" TRUE und anschließendes reset() nicht vergessen, was ein einfaches wieder einbinden mittels include() (nur bei anderen Dateien, im selben Script geht das fürchterlich schief ;)) oder fread() ermöglicht - oder "Lesen bildet 2" und dies, was sogar bei Zirkelbezügen klappt, aber auch ein paar kleine Nickeligkeiten hat, auf die man achten muss.
Warum ist man manchmal nur so vernagelt und denkt nicht an die einfachsten Sachen?

Dennoch, auch weiterhin, bitte *1) ;)
 
Zuletzt bearbeitet:
Oben