Довольно просто; Мне просто любопытно, если есть лучший способ сделать это.
Учитывая массив следующим образом:
( результат preg_match_all()
с PREG_SET_ORDER
)
$matches = array(2) {
[0]=>
array(5) {
[0]=>
string(8) "key=foo;"
["key"]=>
string(3) "key"
[1]=>
string(3) "key"
["value"]=>
string(3) "foo"
[2]=>
string(3) "foo"
}
[1]=>
array(5) {
[0]=>
string(12) "pattern=bar;"
["key"]=>
string(7) "pattern"
[1]=>
string(7) "pattern"
["value"]=>
string(3) "bar"
[2]=>
string(3) "bar"
}
}
Я бы хотел извлечь в массив следующее:
array(2) {
["key"]=>
string(3) "foo"
["pattern"]=>
string(3) "bar"
}
По сути, создание ассоциативного массива $array[$i]['key'] => $array[$i]['value']
для каждого $i
.
( Если это звучит странно, извините, уже поздно )
Во всяком случае, это тривиально; Тем не менее, я пытаюсь сделать это с помощью основных функций PHP array_*
, которые возвращают полученный массив ( извините array_walk
).
Нет foreach
или другие циклические управляющие структуры.
Прямо сейчас, я понял это:
\array_combine(\array_map(function($match) {
return (string) $match['key'];
}, $matches), \array_map(function($match) {
return (string) $match['value'];
}, $matches))
Что работает, но не совсем кратко; Мне не нравится, когда array_map
дважды - один раз для ключей, один раз для значений.
Существует ли более элегантное решение для извлечения вложенных значений из правильно сформированного многомерного массива в одномерный словарь пары ключ / значение?