簡體   English   中英

根據子數組值拆分PHP數組

[英]Split PHP array based on subarray values

是否有PHP函數或其他解決方案可幫助根據子數組中的值拆分數組?

是的,我知道我可以循環執行此操作! 問題是是否還有另一種方法可以避免循環。

例:

使用Active的值,旋轉此數組...

$array_all => Array
(
    [126] => Array
        (
            [DisplayName] => Customer ABC
            [Active] => 1
        )

    [1596] => Array
        (
            [DisplayName] => Customer 123
            [Active] => 0
        )

    [1648] => Array
        (
            [DisplayName] => John Q Sample
            [Active] => 1
        )

    [1649] => Array
        (
            [DisplayName] => Fry & Leela, Inc.
            [Active] => 0
        )

    [1571] => Array
        (
            [DisplayName] => Class Action: Redshirts vs. UFP 
            [Active] => 1
        )
)

...進入這個數組...

$array_active => Array
(
    [126] => Array
        (
            [DisplayName] => Customer ABC
            [Active] => 1
        )

    [1648] => Array
        (
            [DisplayName] => John Q Sample
            [Active] => 1
        )

    [1571] => Array
        (
            [DisplayName] => Class Action: Redshirts vs. UFP 
            [Active] => 1
        )
)

...以及這個數組。

$array_inactive => Array
(

    [1596] => Array
        (
            [DisplayName] => Customer 123
            [Active] => 0
        )

    [1649] => Array
        (
            [DisplayName] => Fry & Leela, Inc.
            [Active] => 0
        )

)

您可以使用array_filter

$actives = array_filter($array_all, function ($row) {
    return $row["Active"];
}); 

$notActives = array_filter($array_all, function ($row) {
    return !$row["Active"];
}); 

您也可以使用array_reduce作為替代,但是它返回索引數組,因此沒有原始鍵:

list($actives, $notActives) = array_reduce($array_all, function ($result, $row) {
    $result[$row["Active"]][] = $row;
    return $result;
}, [[],[]]);

當使用array_reduce還維護鍵時,它變得非常冗長:

list($actives, $notActives) = array_reduce(array_keys($array_all), 
    function ($result, $key) use ($array_all) {
        $result[$array_all[$key]["Active"]][$key] = $array_all[$key];
        return $result;
    }, [[],[]]
);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM