У меня есть массив, который выглядит так:
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"); }