Heim  >  Fragen und Antworten  >  Hauptteil

Wie filtere ich ein mehrdimensionales Array basierend auf Spalten in einem verschachtelten Array?

Angenommen, ich habe ein Array wie dieses:

$array =    [    

    0 => [  
        "label"    =>  "Radiator",  
        "details"  =>   0 => [  
                            "label"     => "Condition",  
                            "value"     => "New",
                        ], 
                        1 => [  
                            "label"     => "Type",  
                            "value"     => "Wall",
                        ],
    ],  
    1 => [  
        "label"    =>  "Airco",  
        "details"  =>   0 => [  
                            "label"     => "Condition",  
                            "value"     => "New",
                        ], 
                        1 => [  
                            "label"     => "Type",  
                            "value"     => "",
                        ], 
    ], 
    2 => [  
        "label"    =>  "Refrigerator",  
        "details"  =>   0 => [  
                            "label"     => "Condition",  
                            "value"     => "Bad",
                        ], 
                        1 => [  
                            "label"     => "Type",  
                            "value"     => "Wall",
                        ], 
    ], 

];

Ich möchte dieses Array filtern, sodass es nur Details enthält, bei denen der Wert nicht leer ist. Klimaanlagen type 值为空,因此它不应返回详细的 type. In diesem Fall sollte das zurückgegebene Array wie folgt aussehen:

$array =    [    

    0 => [  
        "label"    =>  "Radiator",  
        "details"  =>   0 => [  
                            "label"     => "Condition",  
                            "value"     => "New",
                        ], 
                        1 => [  
                            "label"     => "Type",  
                            "value"     => "Wall",
                        ],
    ],  
    1 => [  
        "label"    =>  "Airco",  
        "details"  =>   0 => [  
                            "label"     => "Condition",  
                            "value"     => "New",
                        ],
    ], 
    2 => [  
        "label"    =>  "Refrigerator",  
        "details"  =>   0 => [  
                            "label"     => "Condition",  
                            "value"     => "Bad",
                        ], 
                        1 => [  
                            "label"     => "Type",  
                            "value"     => "Wall",
                        ], 
    ], 

];

Ich weiß, dass ich ein Array basierend auf leeren Spalten filtern kann, indem ich den folgenden Code verwende (wie hier zu finden):

$result = array_filter($array, function($o) use($column) {
    return trim( $o[$column] ) !== '' && $o[$column] !== null;
});

Aber da ich ein verschachteltes Array habedetails, bin ich mir nicht ganz sicher, wie ich diesen Code anpassen soll, damit er für meinen Fall geeignet ist.

P粉004287665P粉004287665377 Tage vor505

Antworte allen(1)Ich werde antworten

  • P粉458725040

    P粉4587250402023-09-09 09:24:13

    您的array_filter仅在第一级起作用。您还希望在 details 数组上进行循环,您可以使用简单的 foreach 循环来完成此操作。外部循环将遍历所有行,内部循环将遍历每行的详细信息

    <?php
    
    foreach($array as &$row){
        foreach($row['details'] as $key => $record){
            if(strlen($record['value']) == 0){
                unset($row['details'][$key]);
            }
        }
    }

    现场演示

    Antwort
    0
  • StornierenAntwort