在foreach中创建数组,键是循环中的第一个值


Create array in foreach, key to be the first value in loop

我有一些过滤器:

$filters = array('rooms-4-5', 'city-london-berlin-paris');

我想创建一个这样的数组:

array(
     'rooms' => array('4', '5'),
     'city'  => array('london', 'berlin', 'paris')
);

我试过了:

    foreach($filters as $filter):
        $filter = explode('-', $filter);
        $data[$filter[0]] = array();
        array_shift($filter);
        foreach($filter as $value):
            //here I am stuck ...
        endforeach;
    endforeach;

您似乎已经非常接近了,除了$filter中已经有数组元素,并且只需要删除第一个变量(使用array_shift())并插入它。

问题是array_shift()(文档链接)返回删除的值,这样您就可以将其存储在数组中并用于键。移位后的数组就可以使用了。

以下是完整的结果:

<?php
$filters = array('rooms-4-5', 'city-london-berlin-paris');
$out = array();
foreach($filters as $filter) {
    $filter_exploded = explode('-',$filter);
    $val = array_shift($filter_exploded); // remove first element, add it to the variable
    $out[$val] = $filter_exploded;
}
var_dump($out);