Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Получение определенных значений массива


Автор: ShamanVoodoo 31.5.2013, 22:50
Суть в следующем, есть допустим  массив
Код

$a = array('id'=>1,'name'=>'blabla', 'password' =>'dsf435', 'status' => 'user');

есть ли какая-то стандартная функция или короткое решение получения на основе данного массива среза по ключам?
Код

$b = funct($a, array ('name',  'status') );
array('name'=>'blabla', 'status' => 'user')


Автор: Arantir 31.5.2013, 22:59
http://www.php.net/manual/ru/function.array-intersect-key.php ?

Автор: ShamanVoodoo 1.6.2013, 00:05
Arantir> я тоже о ней подумал, но нет - ключи то у второго массива отличаются

Автор: Arantir 1.6.2013, 00:17
Цитата

$b = funct($a, array ('name',  'status') );
array('name'=>'blabla', 'status' => 'user')

Код

$b = array_intersect_key($a, array_flip(array('name',  'status')));
array('name'=>'blabla', 'status' => 'user')


?

Автор: ShamanVoodoo 1.6.2013, 12:27
Arantir спасибо,  а то что-то заклинило меня на самописной функции выборки циклом

Автор: Чучмек 1.6.2013, 15:39
Цитата(ShamanVoodoo @  1.6.2013,  12:27 Найти цитируемый пост)
  а то что-то заклинило меня на самописной функции выборки циклом 
 а чё?
Код

  function GetArrayVal($m)
    {
    $result = array();
    $c = func_num_args();
    for($i=1;$i<$c;$i++)
     {
     $key = func_get_arg($i);
     if (isset($m[$key])) $result[$key] = $m[$key];
     }
    return $result;
    }

 print_r(GetArrayVal(array('a'=>0,'b'=>1,'c'=>2,'d'=>3,'e'=>4,'f'=>5),'a','c','d'));



Автор: ShamanVoodoo 1.6.2013, 18:21
Чучмек>
ошибка вроде: аргументов быть не должно т.е. function GetArrayVal()
вариант funct($array, $array2)  удобнее\проще и быстрее
пользовательские функции работают медленнее системных, поэтому стараюсь не изобретать велосипеды

Автор: Чучмек 1.6.2013, 19:39
Цитата(ShamanVoodoo @  1.6.2013,  18:21 Найти цитируемый пост)
аргументов быть не должно

Это как, почему?
Цитата(ShamanVoodoo @  1.6.2013,  18:21 Найти цитируемый пост)
пользовательские функции работают медленнее системных

А ты заметишь разницу?
Цитата(ShamanVoodoo @  1.6.2013,  18:21 Найти цитируемый пост)
стараюсь не изобретать велосипеды

Создавать три дополнительных массива, чтобы получить значения из существующего - тоже не очень. 

Автор: ShamanVoodoo 1.6.2013, 20:37
Чучмек
Цитата(Чучмек @  1.6.2013,  19:39 Найти цитируемый пост)
Это как, почему?

проверил в 5.3 действительно работает без проблем, помню в какой-то версии php ругался на такие вещи

Цитата(Чучмек @  1.6.2013,  19:39 Найти цитируемый пост)
А ты заметишь разницу?

это не аргумент, аргументом  бы был бенчмарк вариантов

Автор: krundetz 3.6.2013, 09:43
Цитата(ShamanVoodoo @  1.6.2013,  20:37 Найти цитируемый пост)
это не аргумент, аргументом  бы был бенчмарк вариантов 

аргумент. Так как вот когда разница будет заметна над этим будет стоить париться, не раньше.

Автор: Fortop 3.6.2013, 20:33
Цитата(ShamanVoodoo @  31.5.2013,  22:50 Найти цитируемый пост)
 получения на основе данного массива среза по ключам?

vs
Цитата(ShamanVoodoo @  1.6.2013,  00:05 Найти цитируемый пост)
но нет - ключи то у второго массива отличаются 


?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)