PHP - 在数组中搜索并创建新的

时间:2015-03-13 13:39:45

标签: php arrays

如果可能 foreach 与if结合使用,我想避免。我想搜索数组,取出匹配并在结果上创建一个新的基础。

在这个例子中,我想为每个 os -

创建单独的数组
$os1 = $array;
$os2 = $array...

Array看起来像这样:

    $array = [
            0 => [
                'id'   => 1,
                'name' => 'name',
                'os'   => 1
            ],
            1 => [
                'id'   => 2,
                'name' => 'name',
                'os'   => 1
            ],
            2 => [
                'id'   => 3,
                'name' => 'name',
                'os'   => 2
            ],
            3 => [
                'id'   => 3,
                'name' => 'name',
                'os'   => 2             
            ]
    ];

2 个答案:

答案 0 :(得分:2)

使用array_filter将输入数组减少到预期结果

$os = 1;
$data = array_filter($array, function($item) use ($os) {
    return $item['os'] == $os;
});

答案 1 :(得分:0)

短暂的

$os1 = [];
$os2 = [];
$os3 = [];

foreach ($array as $item) {
    ${'os' . $item['os']}[] = array('id' => $item['id'], 'name' => $item[$name];
}

更好的一个

$os1 = [];
$os2 = [];
$os3 = [];

foreach ($array as $item) {
    switch($item['os']) {
        case 1:
            $os1[] = array('id' => $item['id'], 'name' => $item[$name]);
            break;
        case 2:
            $os2[] = array('id' => $item['id'], 'name' => $item[$name]);
            break;
        case 3:
            $os3[] = array('id' => $item['id'], 'name' => $item[$name]);
            break;
        default:
            throw new Exception('Unknown Os');
    }
}

您也可以指定array($item['id'] => $item[$name]);代替array('id' => $item['id'], 'name' => $item[$name]);

$os1 = [];
$os2 = [];
$os3 = [];

foreach ($array as $item) {
    ${'os' . $item['os']}[] = array($item['id'] => $item[$name]);
}