Hallo!
Ich habe php.net in der letzten Stunde studiert um für folgende Situation die Richtige Funktion zu benutzen. Allerdings möchte nichts so wirklich funktionieren.
Ich habe ein Array, das wie folgt aussieht:
... und so weiter...PHP-Code:$array[0] = '';
$array[1] = 'aaaaa';
$array[2] = 'abcde';
$array[3] = 'vwxyz';
Nun möchte ich, dass mir die Schlüssel zu allen Arrays ausgegeben werden, in denen 'a' steckt.
Also müssten 1 und 2 ausgegeben werden.
Doch weder array_search() noch array_keys() funktionieren hierfür. Kann mir jemand einen Tipp geben?
Hallo Floddr,
array_keys ist doch genau dir Richtige Funktion dafür laut Doku. Wie hast du es denn damit probiert? Vielleicht solltest du dein Array mal assoziativ aufbauen, sollte eigentlich kein unterschied machen aber in allen Beispielen die ich gesehen habe war dies so. Folgendes ist ungetestet sollte jedoch funktionieren:
siehe hierPHP-Code:<?php
$array1 = array(
0 => "",
1 => "aaaaa",
2 => "abcde",
3 => "vwxyz");
// find keys
foreach (array_keys($array1, "a") as $key)
print "$key";
?>
Viele Grüße
Matthias.
http://www.bruecksen.de
ah ok. das kann natürlich sein und kann man natürlich auch aus der Doku so interpretieren.
schade. Wenn sie schon die Suche per Parameter ermöglichen, warum dann nicht gleich richtig. Dann musst du das wohl wie chorn vorgeschlagen hat implementieren.search_value: Wenn angegeben, werden nur Schlüssel mit diesen Werten zurückgegeben.
Viele Grüße
Matthias.
http://www.bruecksen.de
Vermutlich ganz gut. Nur habe ich mit solchen Sachen ehrlich gesagt noch nie gearbeitet. :S
Mein Ansatz sieht nun so aus...
... nur wird hier vermutlich null ausgegeben, weil er ja in $array[3], dem letzten, an keiner Position ein a findet.PHP-Code:$array[0] = '';
$array[1] = 'aaaaa';
$array[2] = 'abcde';
$array[3] = 'vwxyz';
foreach ($array as $blub) {
$dort = strpos ($blub, 'a')
echo $dort;
Strpos gibt doch vermutlich nur die erste Position aus. Ich brauche aber alle.
hmm naja so schwer ist das doch nicht.
ungetestet.PHP-Code:$array[0] = '';
$array[1] = 'aaaaa';
$array[2] = 'abcde';
$array[3] = 'vwxyz';
foreach ($array as $key => $value) {
$pos = strpos ($value, 'a');
if ($pos !== false) {
echo $key;
}
}
Viele Grüße
Matthias.
http://www.bruecksen.de
Funktioniert leider nicht. Erzeugt als Ausgabe...
Code:00
hatte da noch einmal was geändert. schau es dir jetzt noch mal an. sollte nun passen. In der vorigen version habe ich $pos ausgegeben was natürlich schwachsinn ist.
Viele Grüße
Matthias.
http://www.bruecksen.de
Uiuiui... 12 (eins und zwei) wird ausgegeben. Das ist das, was ich wollte
Danke.
Ich habe mal etwas rumgespielt...
Beabsichtigt war folgende Ausgabe:PHP-Code:$array[0] = '';
$array[1] = 'aaaaa';
$array[2] = 'abcde';
$array[3] = 'vwxyz';
$array[4] = '12345';
$array[5] = 'edcba';
foreach ($array as $key => $value) {
$pos = strpos ($value, 'a');
if ($pos !== false) {
$arraycheck[$key] = $key;
}
for($i = 1; $i < count($array); $i++){
if ($arraycheck[$i] > 0) {
echo $i.$array[$i].'<br>';
}
}
}
In allen ist 'a' enthalten.Code:1aaaaa 2abcde 5edcba
Tatsächlich erscheint allerdings folgendes:
Wie kommen die ersten 9 Zeilen zustande?Code:1aaaaa 1aaaaa 2abcde 1aaaaa 2abcde 1aaaaa 2abcde 1aaaaa 2abcde 1aaaaa 2abcde 5edcba![]()
Du gibst für jede Suchoperation die kompletten Suchergebnisse aus. Siehst du auch gleich an der Klammersetzung. foreach{ ... for{... Mir erschliesst sich auch nicht, warum du ein Mal foreach und ein Mal for benutzt.
Hey Floddr,
so geht das nicht: LTFB
In deinem ersten Lösungsansatz haben schon hier und da Klammern und Semikolons gefehlt. Das hier ist auch wieder ein Klammer Problem. Auf die Lösung solltest du jetzt jedoch mal selbst kommen. Sauberen Code mit sauberen Einrückungen und dir klar machen wann welche Schleife jetzt durchlaufen wird und wann sie wirklich durchlaufen werden soll und tada, du hast ein Funktionierendes Skript
edit: man bin ich langsam![]()
Viele Grüße
Matthias.
http://www.bruecksen.de
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)