php – поиск ключей в массиве, который соответствует шаблону

У меня есть массив, который выглядит так:

Array ( [2.5] => ABDE [4.8] => Some other value ) 

Как я могу найти пару ключей / значений, где ключ соответствует шаблону? Я буду знать значение первой цифры в ключе, но не второе. поэтому, например, используя префикс «2.», я хочу как-то найти ключ «2.5» и вернуть как ключ, так и значение «ABDE».

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

 $prefix = 2; $pattern = '/'.$prefix.'\.\d/i'; 

а затем перебирает массив и проверяет каждый ключ. (кстати, только для демонстрационных целей префикс $ был жестко закодирован до 2, но в реальной системе это значение предоставлено вводом пользователя).

Мне интересно, есть ли более простой способ сделать это?

Благодарю.

вы можете просто перебрать массив и проверить ключи

 $array = array(...your values...); foreach($array as $key => $value) { if (preg_match($pattern,$key)){ // it matches } } 

Вы можете обернуть его в функцию и передать свой шаблон в качестве параметра

Я думаю, вам нужно что-то вроде этого:

 $keys = array_keys($array); $result = preg_grep($pattern, $keys); 

Результатом будет массив, содержащий все ключи, соответствующие регулярному выражению. Клавиши могут использоваться для получения соответствующего значения.

Посмотрите на функцию preg_grep .

Старый вопрос, но вот что мне нравится делать:

 $array = [ '2.5' => 'ABDE', '4.8' => 'Some other value' ]; 

preg_grep + array_keys найдут все ключи

 $keys = preg_grep( '/^2\.\d/i', array_keys( $array ) ); 

Вы можете добавить array_intersect_key и array_flip чтобы извлечь срез массива, который соответствует шаблону

 $vals = array_intersect_key( $array, array_flip( preg_grep( '/^2\.\d/i', array_keys( $array ) ) ) ); 

Это мои пути

 $data = ["path"=>"folder","filename"=>"folder/file.txt","required"=>false]; // FIRST WAY $keys = array_keys($data); if (!in_array("path", $keys) && !in_array("filename",$keys) && !in_array("required",$keys)) { return myReturn(false, "Dados pendentes"); } // SECOND WAY $keys = implode("," array_keys($data)); if (!preg_match('/(path)|(filename)|(required)/'), $keys) { return myReturn(false, "Dados pendentes"); }