Intereting Posts
Преобразование текста в ссылку – проблема с регулярным выражением php Captcha не работает в CI Как поместить блоки PHP-кода в PHPDoc DocBlock Пребывание на той же странице без обновления после добавления в базу данных Что это значит? "Ошибка анализа: синтаксическая ошибка, неожиданный T_PAAMAYIM_NEKUDOTAYIM" Ошибка Google Recaptcha, вход в систему без завершения головоломки, но показывает тик Эхо определенные строки из базы данных mysql как я могу запросить переменную в моем home.ctp моего приложения cakePHP? Joomla 1.0, ссылка администратора перенаправляется на «installation / index.php», как предотвратить это перенаправление? PHP – и / или ключевые слова Использование mysql_real_escape_string с PDO (без подключения к локальному серверу) mySQL select count, несколько таблиц Ошибка PHP / Apache в скрипте (ошибка сегментации (11) Как передать переменное количество аргументов функции PHP Пример теста PHPUnit на Laravel 5.4 не работает с 404

Получить значения массива ключами

Я ищу встроенную функцию php, которая принимает массив ключей в качестве входных данных и возвращает мне соответствующие значения.

например, у меня есть следующий массив

$arr = array("key1"=>100, "key2"=>200, "key3"=>300, 'key4'=>400); 

и мне нужны значения для ключей key2 и key4, поэтому у меня есть другой array("key2", "key4") Мне нужна функция, которая принимает этот массив и первый массив в качестве входных данных и дает мне значения в ответ. Таким образом, ответ будет array(200, 400)

Я думаю, что вы ищете array_intersect_key . Пример:

 array_intersect_key(array('a' => 1, 'b' => 3, 'c' => 5), array_flip(array('a', 'c'))); 

Вернулось бы:

 array('a' => 1, 'c' => 5); 

Вы можете использовать array('a' => '', 'c' => '') вместо array_flip(...) если вы хотите иметь более простой код.

Обратите внимание, что ключи массива сохранены. После этого вы должны использовать array_values, если вам нужен последовательный массив.

Альтернативный ответ:

 $keys = array("key2", "key4"); return array_map(function($x) use ($arr) { return $arr[$x]; }, $keys); 
 foreach($input_arr as $key) { $output_arr[] = $mapping[$key]; } 

Это приведет к $output_arr имеющему значения, соответствующие списку ключей в $input_arr , на основе сопоставления значений $input_arr > в $mapping . Если вы хотите, вы можете обернуть его в функцию:

 function get_values_for_keys($mapping, $keys) { foreach($keys as $key) { $output_arr[] = $mapping[$key]; } return $output_arr; } 

Тогда вы просто назовете это так:

 $a = array('a' => 1, 'b' => 2, 'c' => 3); $values = get_values_for_keys($a, array('a', 'c')); // $values is now array(1, 3) 

Одно из соображений, которое стоит сделать в отношении представленных решений, – это использовать array_intersect_key (), если второй аргумент имеет дублированные значения, они будут перезаписаны при передаче в array_flip (), потому что, очевидно, индексы массивов уникальны.

И это не происходит со вторым подходом, потому что нет переворота, что делает его подходящим для определенных случаев.