繁体   English   中英

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

[英]PHP - search in array and create new one

我想避免foreach与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]);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM