2017-09-11 3 views
1

Je sais que je peux le faire comme ça quand je cherche de la valeur dans array.Comment trouver la clé de tableau qui a une valeur contenant une certaine chaîne

$example = array('example','One more example','last example'); 
$searchword = 'last'; 
$matches = array_filter($example, function($var) use ($searchword) { return preg_match("/\b$searchword\b/i", $var); }); 

Cependant, je suis désireux de faire quelque chose comme ça, mais pour cet exemple:

$example = array("first" => "bar", "second" => "foo", "last example" => "boo"); 
$searchword = 'last'; 

Comment puis-je changer cela pour obtenir la valeur de clé qui contient searchword au lieu de la valeur?

$matches = array_filter($example, function($var) use ($searchword) { return preg_match("/\b$searchword\b/i", $var); }); 
+0

Vous pouvez générer un tableau des clés de tableau en utilisant array_keys et faire la recherche sur celui-ci, et utiliser des clés appariées pour récupérer leurs vals du tableau original. – flauntster

+0

Jetez un coup d'oeil [ici] (https://stackoverflow.com/questions/5808923/filter-values-from-an-array-similar-to-sql-like-search-using-php) – Michel

+0

@Michel J'ai J'ai déjà cherché les valeurs, je le veux basé sur la 'key' –

Répondre

1

Vous pouvez essayer celui-ci. Ici, nous utilisons array_flip, array_keys et preg_grep

Solution 1:

Try this code snippet here

<?php 
$searchword = 'last'; 
$example = array("first" => "bar", "second" => "foo", "last example" => "boo"); 
$result=array_flip(preg_grep("/$searchword/",array_keys($example))); 
print_r(array_intersect_key($example, $result)); 

Solution 2: (Since PHP 5.6) Une bonne recommandation @axiac

Try this code snippet here

<?php 
ini_set('display_errors', 1); 
$searchword = 'last'; 
$example = array("first" => "bar", "second" => "foo", "last example" => "boo"); 
$example=array_filter($example,function($value,$key) use($searchword){ 
    return strstr($key, $searchword); 
},ARRAY_FILTER_USE_KEY); 
print_r($example); 
+1

Merci pour l'exemple, il était facile d'adapter mon code pour utiliser un code similaire à celui-ci –

+1

@ChrisBeckett heureux de vous aider ton ami .. :) –

1

Vous pouvez utiliser la fonction array_keys que vous obtenez seulement la clé de l'exemple $ array

$matches = array_filter(array_keys($example), function($var) use ($searchword) { 
return preg_match("/\b$searchword\b/i", $var); }); 
+0

Appel à la fonction undefined 'array_key()' –

+0

manquant s array_keys() je viens de le corriger –