Bestimmte Werte aus Array auswählen

DFence

Mitglied
Moinsen zusammen,
bin verzweifelt auf der Suche nach einer Möglichkeit, aus einem Array bestimmte Werte auszuwählen.

Ich habe ein Array mit zig Begriffen. Es handelt sich nur um Wörter.
Ich hätte jetzt gerne nur die z.B. die mit A anfangen.
Dabei soll aber egal sein, ob a oder A !?

Bin auf die Funktion preg_grep gestoßen, aber hier kann ich glaube ich nur nach einem String durchsuchen ?

Danke im voraus für eure Tipps/Hilfe !
 
Hier hab ich mal was kleines gebastelt. Kann bestimmt noch optimiert werden :-)
Es ist egal ob du einen Klein- oder Großbuchstaben in $search angibst.
PHP:
<?php
function searchString($search,$array){
	// array in schleife durchlaufen
	foreach($array as $key => $var){
		/**
		* substr($var,0,1) = erste buchstabe aus dem String des Arrays
		* ucfirst() wandelt ersten buchstaben in einen Großbuchstaben
		*/
		if(ucfirst(substr($var,0,1)) == $search){
			// wenn erster buchstabe von search im array vorkommt, erstellt es einen neuen Arrayeintrag.
			$z[] = $var;
		}
	}
	// rückgabe des neuen arrays
	return $z;
}

/**
* $array mit Wörtern/Strings
* $search Klein- oder Großbuchstabe
*/
$array = array('test','blubb','foo','bar','food','Test2');
$search = "t";

echo "<pre>";
print_r( searchString(strtoupper($search),$array) );
echo "</pre>";

?>

Ausgabe:
Code:
Array
(
    [0] => test
    [1] => Test2
)
 
Ich habe deine Funktion nochmal ein bisschen umgebaut:
PHP:
function searchArray($search,$array){
    $search = strtoupper($search);
    foreach($array as $var){
        if(strtoupper($var[0]) == $search){
            $z[] = $var;
        }
    }
    return $z;
}

$myArray = array('test', 'baum', 'Baum', 'Baustelle', 'Apfel');
$b = searchArray('b', $myArray); //baum, Baum, Baustelle
 
Mir ist gerade noch was eingefallen.
Theoretisch ist es doch auch möglich schon bei der DB-Abfrage schon zu selektieren mit LIKE 'a%' z.B.

PHP:
SELECT title FROM blablabla WHERE title LIKE 'a%'

Meine Frage nun, wenn man das ganze Alphabet durchmacht. Spricht ich hätte 26 DB Abfragen. Ist das eine dümmliche Lösung ? Also ich meine für jeden Buchstaben eine Abfrage.
 
Ich nehme mal an du rufst es über eine URL auf:

http://www.example.com/site.php?test=a

dann kannst du doch mit:
PHP:
if(isset($_GET['test']) && $_GET['test'] != ''){
   $sql = "SELECT title FROM blablabla WHERE title LIKE '".$_GET['test']."%' ";
}
einzeln ausführen. somit haste keine 26 Abfragen, sondern nur eine
 
Dafür $_GET['test'] bitte noch mit mysql_real_escape_string() escapen oder du bist deine Daten schneller los als dir lieb ist.
 
Sorry, hätte am Anfang besser das Problem beschreiben sollen.

Ich will eine Übersicht haben von den ganzen Begriffen, die in dem Array stecken.
Sollte dann so ungefähr ausschauen.

encybersicht21nk8.png


Deswegen hatte ich dann überlegt, schon bei der DB-Abfrage zu selektieren
und dann eben 26 x abfragen :D

Oder ist das ein unschöner Weg ?
 
Ich habe deine Funktion nochmal ein bisschen umgebaut:
PHP:
function searchArray($search,$array){
    $search = strtoupper($search);
    foreach($array as $var){
        if(strtoupper($var[0]) == $search){
            $z[] = $var;
        }
    }
    return $z;
}

$myArray = array('test', 'baum', 'Baum', 'Baustelle', 'Apfel');
$b = searchArray('b', $myArray); //baum, Baum, Baustelle

Bischen umständlich.Warum das Rad neu erfinden und nicht gleich array_filter() verwenden?
PHP:
function filterArrayByFirstLetter($array, $letter){
    return array_filter($array, create_function('$item', "return (strtoupper(\$item[0]) == strtoupper('{$letter}'));"));
}

$myArray = array('test', 'baum', 'Baum', 'Baustelle', 'Apfel');
var_dump(filterArrayByFirstLetter($myArray, 'b'));
 
in der Manual steht das create_function ziemlich langsam sein soll. Wäre es da nicht besser gleich die function zu schreiben und in array_filter zu übergeben?
 
Zurück