Array schreiben und mit Kriterien auslesen

everlast123

Grünschnabel
Hallo zusammen!

Es muss ein bekanntes Thema sein, aber finde keinen passenden Artikel:

Zuerst die Idee:
Ich möchte eine Tabelle in ein Array lesen. Jedes Element soll eine Nummer (welche NICHT eindeutig ist) beinhalten und einen Text. Also werde ich ein Array in ein Array schreiben wie etwa:

$testarr[0][0] = "1";
$testarr[0][1] = "Hello";
$testarr[1][0] = "1";
$testarr[1][1] = "world";

Das funktioniert soweit so gut. Nun suche ich aber die schönste Möglichkeit, zuerst das Array durchzugehen, alle mit der Nummer 1 zu selektieren und davon nur dasjenige, welche der Text noch einer Vorgabe enspricht (Beispielsweise $testarr[0][1] == "hello").

Geht das mit einer foreach-Schleife oder kennt jemand einen schöneren Weg?
 
Moin,

soetwas kannst du "schöner" mit [phpf]array_filter[/phpf] machen.

Am Schönsten wäre es natürlich, wenn du gleich per SQL nur die passenden Datensätze selektierst(sofern dies für deine Anwendung Sinn macht und du die Daten der Ergebnisliste nur nach diesem einen Kriterium filtern willst)
 
foreach-Schleifen sind eine möglichkeit. Oder man nutzt PHP-Funktionen. Was schneller ist müsste geprüft werden.

PHP:
<?php
// zu suchende Werte 
$searchkey = 1;
$searchvalue = 'world';

//Beispieldaten
$testarr[0][0] = "1";
$testarr[0][1] = "Hello";
$testarr[1][0] = "1";
$testarr[1][1] = "world";

// Search-array mit einem Eintrag erstellen
$searcharray[$searchkey] = $searchvalue;

$arr = array_intersect_key($testarr, $searcharray);
$arr = array_intersect($arr[$searchkey], $searcharray);

var_dump($arr);
?>

Nachtrag:
@Sven
An array_filter dachte ich zuerst auch. Aber filtern nach key, geht schlecht.

Nachtrag 2:
Vergesst den oberen Code. Hab die Aufgabenstellung falsch verstanden!
 
Zuletzt bearbeitet:
So, jetzt eine Lösund mit array_filter die auch den ANforderungen entspricht

PHP:
<?php
// zu suchende Werte 
$s[0] = 1;
$s[1] = 'world';

//Beispieldaten
$testarr[0][0] = "1";
$testarr[0][1] = "Hello";
$testarr[1][0] = "1";
$testarr[1][1] = "world";

$arr = array_filter($testarr, create_function('$subArr', "return \$subArr[0]=={$s[0]} && \$subArr[1] == {$s[1]};"));

var_dump($arr);
?>
 
Vielen Dank für die Antworten! Das ich nicht mal die Funktion array_filter gefunden habe, beschämt mich fast ein bisschen.

Beim letzten Beispiel bringe ich $arr = array_filter($testarr, create_function('$subArr', "return \$subArr[0]=={$s[0]} && \$subArr[1] == {$s[1]};")); nicht zum laufen. Als Ausgabe bekomme ich:

array(0) { }

Weis jemand, an was dies liegen könnte?

edit: die MySQL Variante wäre sicher schöner, leider entspricht sie nicht dem Zweck da ich ein globales Array damit initialisieren möchte.
 
Mein Beispielcode hab ich gestestet und funktioniert genauso wie ich ihn gepostet habe.
Auisgabe:
Code:
array(1) { [1]=>  array(2) { [0]=>  string(1) "1" [1]=>  string(5) "world" } }

Zeig doch mal deine Implementierung, dann seh ich ev. mehr.
 
Wahrscheinlich sehe ich vor lauter Bäume den Wald nicht mehr, aber ich habe ihn 1:1 von dir kopiert:

Code:
// zu suchende Werte
	$s[0] = 1;
	$s[1] = 'world';
 
	//Beispieldaten
	$testarr[0][0] = "1";
	$testarr[0][1] = "Hello";
	$testarr[1][0] = "1";
	$testarr[1][1] = "world";
 
	$arr = array_filter($testarr, create_function('$subArr', "return \$subArr[0]=={$s[0]} && \$subArr[1] == {$s[1]};"));
 
	foreach($arr as $wert) {
		echo "Wert: ".$wert."<br>";
	}


	var_dump($arr);
 
Ich bekomme mit deinem Code die Ausgabe
Code:
Wert: Array
array(1) { [1]=> array(2) { [0]=> string(1) "1" [1]=> string(5) "world" } }
Welche PHP-Version hast du?


$arr ist immer noch ein ein 2-Dimensionaler Array.
Um den Wert zu kriegen müsstest du bei dir den wert so auslesen:
PHP:
	foreach($arr as $wert) {
		echo "Wert: ".$wert[1]."<br>";
	}
 
Ich weis zwar nicht mehr welche PHP Version ich zuvor hatte, aber nach einer Neuinstallation von meinem WAMP hat sich das gelöst, sorry!


Viiiiiiiiiiiiiiiiielen Dank für die Hilfe und die Gedult, topic closed!
 
Zurück