2016-04-13 5 views
0

У меня есть Map, такие как:Hack итерация (карта) по карте

$m = Map { 
    'sort' => 'created', 
    'order' => 'desc', 
} 

Я хочу, чтобы превратить это в строку:

'sort:created order:desc' 

Я могу сделать это с помощью массивов, как описано в this SO answer :

implode(' ', array_map(($k, $v) ==> $k.':'.$v, array_keys($m), $m)) 

Я прочитал документацию Map::items и попробовал:

$m->items()->map(($key, $value) ==> print($key)) 

Но это ничего не печатает.

Я ищу источник oneliner как с массивами, без петель.

ответ

4

map() «s параметр является функцией, которая принимает только один аргумент; если запустить проверки типов, он скажет вам:

test.php:9:20,20: Invalid argument (Typing[4039]) 
    /tmp/hh_server/hhi_1ebd4af3/hhi/interfaces.hhi:363:27,44: Number of arguments doesn't match 
    test.php:9:20,20: Because of this definition 

Что вы хотите mapWithKey()https://3v4l.org/GF69D:

$m->mapWithKey(($key, $value) ==> print($key)); 

Вы также можете использовать точно такой же код, который вы использовали, для массивов: https://3v4l.org/mSREI

+0

Ничего себе сайт 3v4l.org довольно круто! –

0

Использование:

implode(' ', $m->mapWithKey(($k, $v) ==> $k.':'.$v))