| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

22-12-2010, 15:56
|
|
Dj Mik
Registrierter Benutzer
|
|
Registriert seit: Jan 2003
Ort: Siebenen SZ Schweiz
Beiträge: 96
|
|
array suche
hi
ich habe folgendes als Array
Zitat:
ARN-125-WHITE-LF.jpg
ARN-125-WHITE-LF2.jpg
ARN-125-WHITE-R.jpg
ARN125-BLACK-LF.jpg
ARN125-BLACK-R.jpg
ARN125-BLACK-RF.jpg
ARN125-BLUE-SILVER-LF.jpg
ARN125-BLUE-SILVER-R.jpg
ARN125-BLUE-SILVER-RF.jpg
ARN125-ORANGE-H.jpg
ARN125-ORANGE-LF.jpg
ARN125-ORANGE-R.jpg
ARN125-ORANGE-RF.jpg
|
Gibt es eine möglichkeit, dass ich nach "black" suchen kann und auch black ausgegeben wird?
|

22-12-2010, 16:09
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
array_filter()
stripos()
|

22-12-2010, 17:09
|
|
Dj Mik
Registrierter Benutzer
|
|
Registriert seit: Jan 2003
Ort: Siebenen SZ Schweiz
Beiträge: 96
|
|
Zitat:
Zitat von combie
array_filter()
stripos()
|
danke!
aber ... ich komme nich drauf, wie das mit array_filter() funktionieren sollte 
Ich müsste ja die 4 verschiedenen Farben in verschiedenen Arrays machen
white, blue, balck, orange
weisst du gerade, wie ich das mache?
|

22-12-2010, 18:25
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Hallo,
vielleicht musst du erstmal genauer darlegen, was du am Ende raushaben willst.
Gruß,
Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

22-12-2010, 18:41
|
|
Dj Mik
Registrierter Benutzer
|
|
Registriert seit: Jan 2003
Ort: Siebenen SZ Schweiz
Beiträge: 96
|
|
oke ...
ich habe folgendes im Array welches die Variable $inhalt trägt:
Zitat:
ARN-125-WHITE-LF.jpg
ARN-125-WHITE-LF2.jpg
ARN-125-WHITE-R.jpg
ARN125-BLACK-LF.jpg
ARN125-BLACK-R.jpg
ARN125-BLACK-RF.jpg
ARN125-BLUE-SILVER-LF.jpg
ARN125-BLUE-SILVER-R.jpg
ARN125-BLUE-SILVER-RF.jpg
ARN125-ORANGE-H.jpg
ARN125-ORANGE-LF.jpg
ARN125-ORANGE-R.jpg
ARN125-ORANGE-RF.jpg
|
dort sieht man, dass ews verschiedene farben der ARN125 gibt
- white
- black
- blue-silver
- orange
ich will jetzt eine Variable, welche alle black anzeigt.
Code:
foreach($inhalt as $ausdruck)
echo $ausdruck,"<br>";
dieser Code zeigt mir alle Dateinamen an (siehe Anfang).
Wie mache ich nun eine Variable, die nur z.B. die "Black" anzeigt?
|

22-12-2010, 18:48
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Also doch array_filter. Wenn du das im Handbuch nachschlägst, findest du auch Anwendungsbeispiele. Wenn du es viermal aufrufst, kannst du vier neue Arrays erzeugen, die jeweils eine Farbe enthalten. Du kannst es aber auch mit einem Gruppenwechsel (Google-Futter) erledigen, dann musst du vorher nicht einmal wissen, welche Farben drin sein können.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

22-12-2010, 19:27
|
|
Dj Mik
Registrierter Benutzer
|
|
Registriert seit: Jan 2003
Ort: Siebenen SZ Schweiz
Beiträge: 96
|
|
PHP-Code:
$farbe = "black";
foreach($inhalt as $ausdruck)
echo $ausdruck,"<br>";
$filterei = array_filter($ausdruck, $farbe);
echo $filterei;
Fehler:
Zitat:
|
Warning: array_filter() [function.array-filter.php]: The second argument, 'black', should be a valid callback in /home/keewayr/www/keeway-roller.ch/blauein.php on line 19
|
Geändert von Dj Mik (22-12-2010 um 20:08 Uhr)
|

22-12-2010, 20:23
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Nein, der zweite Parameter von array_filter ist nicht vom Typ String!
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

22-12-2010, 23:50
|
|
Dj Mik
Registrierter Benutzer
|
|
Registriert seit: Jan 2003
Ort: Siebenen SZ Schweiz
Beiträge: 96
|
|
Muss ich demfall eine Funktion erstellen?
PHP-Code:
function black($var)
{
return($var & 1);
}
z.B.
oder wie?
|

23-12-2010, 00:16
|
|
rei
Registrierter Benutzer
|
|
Registriert seit: Dec 2010
Beiträge: 15
|
|
array_filter oder strpos
Ja....
Der Callback gibt true oder false zurück,
je nach dem was Du für richtig hälst.
PHP Doku:: Filtert Elemente eines Arrays mittels einer Callback-Funktion - function.array-filter.html
In Deinem Fall reicht ein einfaches:
PHP-Code:
$inhalt = array(); $inhalt[]="ARN-125-WHITE-LF.jpg"; $inhalt[]="ARN-125-WHITE-LF2.jpg"; $inhalt[]="ARN-125-WHITE-R.jpg"; $inhalt[]="ARN125-BLACK-LF.jpg"; ...
$color = 'black'; $result = array(); foreach($inhalt as $ausdruck){ if(strpos(strtoupper($ausdruck),strtoupper($color))){ echo "\n".$ausdruck." hat die Farbe ".$color."<br>"; $result[] = $ausdruck; } } print_r($result);
|

23-12-2010, 00:55
|
|
Dj Mik
Registrierter Benutzer
|
|
Registriert seit: Jan 2003
Ort: Siebenen SZ Schweiz
Beiträge: 96
|
|
du bist mein Held!!   das klappt ja tatsächlich!!!!
Ich wäre nie darauf gekommen.
sag mir nur noch was kleines ...
Hab ich das richtig verstanden?
PHP-Code:
// Filtern $farbe = "black"; //nach was gesucht und gefiltert werden soll $result = array(); //Sinnlos ... keine Ahnung für was ich das brauche. hab ich raus genommen. foreach($inhalt as $ausdruck) { //schleife bis alles herausgegeben wurde und an $ausdruck übergeben wurde if(strpos(strtoupper($ausdruck),strtoupper($farbe))) { //strpos -> die suchfunktion|strtoupper->wandelt buchstaben von klein auf gross um echo "\n".$ausdruck." hat die Farbe ".$farbe."<br>"; //was macht genau das "\n"? } } print_r($result);//Sinnlos...brauch ich nicht.
gibt nur fehlermeldung mit der variable $result
Aber so ist es jetzt wie gewünscht.
Wenn ich jetzt bei der $farbe "blue" eingebe, dann werden mir alle 3 Bilder vom blauen Roller angeziegt.
Genau das was ich wollte.
Was ich nicht verstehe, warum nichts angezeigt wird, wenn ich z.B. "arn" eingebe
sucht er nicht von anfang an ???
Geändert von Dj Mik (23-12-2010 um 01:21 Uhr)
|

23-12-2010, 02:39
|
|
rei
Registrierter Benutzer
|
|
Registriert seit: Dec 2010
Beiträge: 15
|
|
Zitat:
Zitat von Dj Mik
Was ich nicht verstehe, warum nichts angezeigt wird, wenn ich z.B. "arn" eingebe
sucht er nicht von anfang an ???
|
PHP-Code:
if(strpos(strtoupper($ausdruck),strtoupper($farbe))){ ... }
erste Position wird mit '0' (Zahl Null) angegebn
und das ist in der if (false)
also ändern in:
PHP-Code:
if(is_int(strpos(strtoupper($ausdruck),strtoupper($farbe)))){ ... }
Da Ergebnis eine Zahl ist -> Hurra,
auch an der ersten Postion im Text.
P.S:
Doku lesen bei php.net oder:
PHP Doku:: Sucht das erste Vorkommen des Suchstrings - function.strpos.html
|

23-12-2010, 08:54
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
Zitat:
Muss ich demfall eine Funktion erstellen?
PHP-Code:
function black($var)
{
return($var & 1);
}
z.B.
oder wie?
|
Du solltest erstmal Grundlagen Arbeit machen, damit du überhaupt das Handbuch verstehst.
@rei
Der doppelte strtoupper() ist überflüssig!
Nicht umsonst habe ich oben stripos() genannt und nicht strpos()!
is_int()... naja....
Kann ich durch gehen lassen.
Man will ja nicht wissen, ob eine Integer Zahl raus kommt, sondern ob das Ergebnis ungleich false ist.
In diesem konkreten Fall ist das allerdings völlig gleichwertig.
Und nach dem hier was laufendes zusammen gekommen ist, auch mal meine Vorschläge....
PHP-Code:
function arrayFilterByString(Array $array,$filterString)
{
$callback = function ($item) use ($filterString)
{
return false !== stripos($item,$filterString);
};
return array_filter($array,$callback);
}
$nadel = 'black';
$suchergebnis = arrayFilterByString($heuhaufen,$nadel);
foreach($suchergebnis as $ausdruck)
echo $ausdruck,"<br>";
PHP-Code:
class StringFilterIterator extends FilterIterator
{
protected $suchbegriff = '';
public function __construct(Iterator $iterator,$suchbegriff)
{
$this->suchbegriff = $suchbegriff;
parent::__construct($iterator);
}
public function accept()
{
return false !== stripos($this->current(),$this->suchbegriff);
}
}
$nadel = 'black';
$iterator = new StringFilterIterator(
new ArrayIterator($heuhaufen),$nadel);
foreach($iterator as $ausdruck)
echo $ausdruck,"<br>";
Geändert von combie (23-12-2010 um 10:53 Uhr)
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|