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


PHP - search in array and create new one

我想避免如果可能与if结合使用。我想搜索数组,取出匹配项并根据结果创建新的匹配项。

在这个例子中,我想为每个操作系统创建单独的数组 -

$os1 = $array;
$os2 = $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             
            ]
    ];

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

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

短的

$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]);
}