2017-07-14 2 views
0

Ich habe folgende Array: -PHP: Entfernen Sie verschachtelte Arrays mit nur 1 Schlüssel

array(3) { 
    [1]=> 
    array(1) { 
    ["A"]=> 
    float(5) 
    } 
    [2]=> 
    array(2) { 
    ["A"]=> 
    float(1) 
    ["B"]=> 
    float(3) 
    } 
    [3]=> 
    array(2) { 
    ["A"]=> 
    float(5) 
    ["B"]=> 
    float(6) 
    } 
} 

Und ich möchte die verschachtelten Arrays entfernen/herauszufiltern, die nur Speicher 1 Schlüssel, so dass es so enden würde, :

array(2) { 
    [2]=> 
    array(2) { 
    ["A"]=> 
    float(1) 
    ["B"]=> 
    float(3) 
    } 
    [3]=> 
    array(2) { 
    ["A"]=> 
    float(5) 
    ["B"]=> 
    float(6) 
    } 
} 

Gibt es eine einfache Lösung/Möglichkeit, dies zu tun?

+4

'in Kombination array_filter' mit' count' ... – deceze

+1

Ja, es gibt eine einfache Lösung/Art und Weise, dies zu tun. Hast du irgendwas probiert? – axiac

+0

Ich habe array_filter mit den spezifischen Schlüsseln (["A"]) verwendet, um zu überprüfen, ob sie leer sind und sie entfernen, aber ich dachte, das wäre nicht ideal, da es auch einen Schlüssel "C" geben könnte und müsste alle Filter manuell. – ubik

Antwort

1

Sie mit einfachen foreach(): -

foreach($array as $key=>$arr){ 
    if(count($arr) == 1){ 
     unset($array[$key]); 
    } 
} 

print_r($array); 

Ausgang: - https://eval.in/832446

Oder mit array_filter: -

$newarray = array_filter($array, function($var) { 
    return (count($var) !=1); 
}); 

Ausgang: - https://eval.in/832451

+0

Vielen Dank! Funktioniert perfekt. Ich habe etwas ähnliches mit einer for-Schleife versucht, aber es schien nie zu funktionieren. – ubik

+1

@ubik froh, Ihnen zu helfen :) :) –

1

Die banalsten Methode I könnte für diese acti denken vity ist die Zählfunktion von PHP.

Lässt Ihr Array annehmen, wie Sie definiert haben, und lässt es originalArray-

array(3) { 
    [1]=> 
    array(1) { 
    ["A"]=> 
    float(5) 
    } 
    [2]=> 
    array(2) { 
    ["A"]=> 
    float(1) 
    ["B"]=> 
    float(3) 
    } 
    [3]=> 
    array(2) { 
    ["A"]=> 
    float(5) 
    ["B"]=> 
    float(6) 
    } 
} 
$ rufen

Jetzt werden wir über das gesamte Array iterieren Indizes mit mehreren Schlüsseln zu finden und sie auf einen anderen Array schieben.

$new_array = array(); 

for($i=0;$i<count($originalArray);$i++) 
{ 
    if(count($originalArray[$i])>1) 
    { 
    array_push($new_array,$originalArray[$i]); 
    } 
} 
Verwandte Themen