J'ai un tableau et j'aimerais rechercher la chaîne 'green'
. Donc, dans ce cas, il devrait renvoyer le $arr[2]
$arr = array(0 => 'blue', 1 => 'red', 2 => 'green string', 3 => 'red');
existe-t-il une fonction prédéfinie telle que in_array () qui effectue le travail plutôt que de le parcourir en boucle et de comparer chaque valeur?
Vous pouvez utiliser la fonction array_search de php. Il est supporté dans PHP> = 4.0.5.
$array = array(0 => 'blue', 1 => 'red', 2 => 'green string', 3 => 'red');
$m_array = preg_grep('/^green\s.*/', $array);
$m_array
contient des éléments correspondants du tableau.
Pour un correspondance partielle vous pouvez itérer le tableau et utiliser une fonction de recherche de chaîne comme strpos () .
function array_search_partial($arr, $keyword) {
foreach($arr as $index => $string) {
if (strpos($string, $keyword) !== FALSE)
return $index;
}
}
Pour un correspondance exacte , utilisez in_array ()
in_array('green', $arr)
Il y a plusieurs façons ...
$arr = array(0 => 'blue', 1 => 'red', 2 => 'green string', 3 => 'red');
Recherche le tableau avec une boucle:
$results = array();
foreach ($arr as $value) {
if (strpos($value, 'green') !== false) { $results[] = $value; }
}
if( empty($results) ) { echo 'No matches found.'; }
else { echo "'green' was found in: " . implode('; ', $results); }
Utilise array_filter ():
$results = array_filter($arr, function($value) {
return strpos($value, 'green') !== false;
});
Pour utiliser les fermetures avec d'autres arguments, il existe le mot clé use
-. Vous pouvez donc le résumer et l’envelopper dans une fonction:
function find_string_in_array ($arr, $string) {
return array_filter($arr, function($value) use ($string) {
return strpos($value, $string) !== false;
});
}
$results = find_string_in_array ($arr, 'green');
if( empty($results) ) { echo 'No matches found.'; }
else { echo "'green' was found in: " . implode('; ', $results); }
Voici un exemple de travail: http://codepad.viper-7.com/xZtnN7
pour rechercher avec comme as sql avec '% needle%', vous pouvez essayer avec
$input = preg_quote('gree', '~'); // don't forget to quote input string!
$data = array(
1 => 'orange',
2 => 'green string',
3 => 'green',
4 => 'red',
5 => 'black'
);
$result = preg_filter('~' . $input . '~', null, $data);
et le résultat est
{
"2": " string",
"3": ""
}
PHP 5.3+
array_walk($arr, function($item, $key) {
if(strpos($item, 'green') !== false) {
echo 'Found in: ' . $item . ', with key: ' . $key;
}
});
<?php
$a=array("a"=>"red","b"=>"green","c"=>"blue");
echo array_search("red",$a);
?>
J'ai le même problème alors essayez ceci ...
function check($string)
{
foreach($arr as $a) {
if(strpos($a,$string) !== false) {
return true;
}
}
return false;
}
C'est une fonction pour les tableaux normaux ou multidimensionnels.
Voici le code (version 1) :
function array_find($needle, array $haystack, $column = null) {
if(is_array($haystack[0]) === true) { // check for multidimentional array
foreach (array_column($haystack, $column) as $key => $value) {
if (strpos(strtolower($value), strtolower($needle)) !== false) {
return $key;
}
}
} else {
foreach ($haystack as $key => $value) { // for normal array
if (strpos(strtolower($value), strtolower($needle)) !== false) {
return $key;
}
}
}
return false;
}
Voici un exemple:
$multiArray = array(
0 => array(
'name' => 'kevin',
'hobbies' => 'Football / Cricket'),
1 => array(
'name' => 'tom',
'hobbies' => 'tennis'),
2 => array(
'name' => 'alex',
'hobbies' => 'Golf, Softball')
);
$singleArray = array(
0 => 'Tennis',
1 => 'Cricket',
);
echo "key is - ". array_find('cricket', $singleArray); // returns - key is - 1
echo "key is - ". array_find('cricket', $multiArray, 'hobbies'); // returns - key is - 0
Pour les tableaux multidimensionnels uniquement - $ column correspond au nom de la clé dans chaque tableau. Si l'aiguille $ apparaît plusieurs fois, je suggère d'ajouter ce paramètre pour ajouter chaque clé à un tableau.
Voici un exemple si vous attendez plusieurs correspondances (version 2) :
function array_find($needle, array $haystack, $column = null) {
$keyArray = array();
if(is_array($haystack[0]) === true) { // for multidimentional array
foreach (array_column($haystack, $column) as $key => $value) {
if (strpos(strtolower($value), strtolower($needle)) !== false) {
$keyArray[] = $key;
}
}
} else {
foreach ($haystack as $key => $value) { // for normal array
if (strpos(strtolower($value), strtolower($needle)) !== false) {
$keyArray[] = $key;
}
}
}
if(empty($keyArray)) {
return false;
}
if(count($keyArray) == 1) {
return $keyArray[0];
} else {
return $keyArray;
}
}
Ceci retourne la clé s'il n'y a qu'une seule correspondance, mais s'il y a plusieurs correspondances pour l'aiguille $ dans l'une des colonnes de la colonne $, alors elle retournera un tableau des clés correspondantes.
J'espère que cela t'aides :)
Une recherche rapide d'une phrase dans tout le tableau pourrait ressembler à ceci:
if (preg_match("/search/is", var_export($arr, true))) {
// match
}
Afin de savoir si la sous-chaîne UTF-8 respectant la casse est présente dans array, j'ai trouvé que cette méthode serait beaucoup plus rapide que d'utiliser mb_strtolower ou mb_convert_case:
Implode le tableau dans une chaîne: $ imploded = implode ("", $ myarray); .
Convertissez une chaîne implodée en minuscule à l'aide d'une fonction personnalisée: $ lowercased_imploded = to_lower_case ($ imploded);
fonction to_lower_case ($ str) {
$ from_array = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L "," M "," N "," O "," P "," Q "," R "," S "," T "," U "," V "," W "," W "," X ", "Y", "Z", "Ä", "Ö", "Ü", "", "Ž", "Š"];
$ to_array = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l "," m "," n "," o "," p "," q "," r "," s "," t "," u "," v "," w "," x ", "y", "z", "ä", "ö", "ü", "", "ž", "š"];
foreach ($ from_array comme $ key => $ val) {$ str = str_replace ($ val, $ to_array [$ key], $ str);}
return $ str;
}
function findStr($arr, $str)
{
foreach ($arr as &$s)
{
if(strpos($s, $str) !== false)
return $s;
}
return "";
}
Vous pouvez remplacer la valeur renvoyée par le numéro d’index correspondant avec un peu de modification si vous le souhaitez, mais comme vous avez dit "... renvoyez le $ arr [2]", je l’ai écrit pour renvoyer la valeur.