PHP « Как красиво получить из массива значение по ключу
Предположим есть функция User(), которая большой ассоциативный массив, как из этого массива получить значение только по одному ключу, вот что то типо такого
$user_name = User().['user_name'];
понятно что верхнее выражение не правильное.
$user_name = User().['user_name'];
понятно что верхнее выражение не правильное.
1 ответов
Такое устроит?
function User($field=false)
{
$return = array(
'username' => 'test',
'field1' => 'value1',
'field2' => 'value2',
'field3' => 'value3',
);
return $field ? $return[$field] : $return;
}
Variant 1
$username = User('username');
Variant2
$User = User();
$username = $User['username'];
Крепитесь, люди. Скоро 5.4 выйдет. А может и не очень скоро.
Такая фишка как array dereferencing появилась только в PHP 5.4.0 Alpha 1. А сейчас только через переменную(если не изменять интерфейс метода).
Как вариант, функция-хэлпер для работы с массивами.
/**
* Retrieve a single key from an array. If the key does not exist in the
* array, the default value will be returned instead.
*
* // Get the value "username" from $_POST, if it exists
* $username = arr_get($_POST, 'username');
*
* // Get the value "sorting" from $_GET, if it exists
* $sorting = arr_get($_GET, 'sorting');
*
* @param array $array array to extract from
* @param string $key key name
* @param mixed $default default value
* @return mixed
*/
function arr_get($array, $key, $default = NULL)
{
return isset($array[$key]) ? $array[$key] : $default;
}
вызываем
arr_get(User(), 'user_name')
array_intersect_key(User(),array('SOME_KEY_TO_GET' => ''))
Честно говоря, я использую такой способ чтобы несколько ключей сразу получать, но и для одного может пригодиться.
С дополнительной переменной более производительный вариант, но он засоряет код. Можно функцию обёртку написать для этой цели, что является более правильным вариантом (но не такую которая вначале выбрана как верный вариант, а что-нибудь наподобие этого:
function get_func_arr_value (array $array, $key) {
return (array_key_exists($key,$array) ? $array[$key] : NULL);
}
Если что, я функцию не тестировал, но мысль я верно передал.
Чем так плохо?:
$id = 1;
$user = User($id); // ф-я возвращает ассоциативный массив
$userName = $user['user_name'];
echo $userName;
Что-то я не понял, а о чем речь вообще?
Объясните чайнику. В чем суть вопроса, и в чем суть ответов?
Я серьезно.