Подтвердить что ты не робот

Поиск элемента массива PHP, содержащего строку

$example = array('An example','Another example','Last example');

Как я могу выполнить свободный поиск слова "Last" в вышеприведенном массиве?

echo array_search('Last example',$example);

В приведенном выше коде будет отображаться только знак значения, если игла точно соответствует всем значениям, чего я не хочу. Я хочу что-то вроде этого:

echo array_search('Last',$example);

И я хочу, чтобы ключ значения эхо, если значение содержит слово "Последний".

4b9b3361

Ответ 1

Чтобы найти значения, соответствующие вашим критериям поиска, вы можете использовать функцию array_filter:

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

Теперь массив $matches будет содержать только элементы из исходного массива, содержащие слово last (без учета регистра).

Если вам нужно найти ключи из значений, соответствующих критериям, вам необходимо перебрать массив:

$example = array('An example','Another example','One Example','Last example');
$searchword = 'last';
$matches = array();
foreach($example as $k=>$v) {
    if(preg_match("/\b$searchword\b/i", $v)) {
        $matches[$k] = $v;
    }
}

Теперь массив $matches содержит пары ключ-значение из исходного массива, где значения содержат (нечувствительное к регистру) слово last.

Ответ 2

function customSearch($keyword, $arrayToSearch){
    foreach($arrayToSearch as $key => $arrayItem){
        if( stristr( $arrayItem, $keyword ) ){
            return $key;
        }
    }
}

Ответ 3

$input= array('An example','Another example','Last example');
$needle = 'Last';
$ret = array_keys(array_filter($input, function($var) use ($needle){
    return strpos($var, $needle) !== false;
}));

Это даст вам все ключи, значение которых содержит иглу.

Ответ 4

Он находит ключ элемента с первым совпадением:

echo key(preg_grep('/\b$searchword\b/i', $example));

И если вам нужны все клавиши, используйте foreach:

foreach (preg_grep('/\b$searchword\b/i', $example) as $key => $value) {
  echo $key;
}

Ответ 5

Я также искал решение проблемы OP, и я наткнулся на этот вопрос через Google. Однако ни один из этих ответов не сделал это для меня, поэтому я придумал что-то немного отличное, что хорошо работает.

$arr = array("YD-100 BLACK", "YD-100 GREEN", "YD-100 RED", "YJ-100 BLACK");
//split model number from color
$model = explode(" ",$arr[0])
//find all values that match the model number
$match_values = array_filter($arr, function($val,$key) use (&$model) { return stristr($val, $model[0]);}, ARRAY_FILTER_USE_BOTH);
//returns
//[0] => YD-100 BLACK
//[1] => YD-100 GREEN
//[2] => YD-100 RED

Это будет работать только с PHP 5.6.0 и выше.