2017-06-11 4 views
0
$cart_array = .....; 

Array 
(
[0] => item Object([id] => 123 [size_id] => 2) 
[1] => item Object([id] => 123 [size_id] => 3)) 



$cart_array = array_filter(
    $cart_array, 
    function ($item) { 
     return $item->id != 123 && $item->size_id != 2; 
    } 
); 

Erwartetes Ergebnis:PHP ein Objekt aus dem Array entfernt gibt leere Array

Array 
    (
    [0] => item Object([id] => 123 [size_id] => 3)) 

Aber das gibt ein leeres Array ($ cart_array). Jede Hilfe wäre spürbar. Danke.

+1

können Sie das Ergebnis teilen Sie versuchen zu bekommen – Mureinik

Antwort

2

Dies ist, weil beide Elemente in $cart_array den Test nicht bestehen.

<?php 

$cart1 = new StdClass; 
$cart1->id = 123; 
$cart1->size_id = 2; 

$cart2 = new StdClass; 
$cart2->id = 123; 
$cart2->size_id = 3; 

$cart_array = array_filter(
    [$cart1, $cart2], 
    function ($item) { 
     // Items both have an id of 123, therefore this returns false 
     return $item->id != 123 && $item->size_id != 2; 
    } 
); 

Vielleicht wollten Sie nur Größe 3 behalten?

$cart_array = array_filter(
    [$cart1, $cart2], 
    function ($item) { 
     // This will keep $cart2 since it has an id of 123 and a size_id not equal to 2 but remove $cart1 since size_id is equal to 2 
     return $item->id == 123 && $item->size_id != 2; 
    } 
); 

Beispiel hier: http://ideone.com/oqz16S

+0

Aber es funktioniert nicht mit folgendem Szenario arbeitet http: /. /ideone.com/eK2BMP Was ist, wenn ich $ cart3 entfernen muss ?? –

+0

Es funktioniert immer noch gut für mich: http://ideone.com/aJ6X6w, dies hält nur '$ cart2', weil' size_ id 'scheitert an '$ cart1' und' id' scheitert an '$ cart3'. – sjdaws

+0

$ cart3 id ist 124. –

0

Was ist das Ergebnis, wenn Sie Ihren Array print_r? Wenn der Code, den Sie in Ihre Frage eingegeben haben, mit dem Code identisch ist, den Sie ausführen möchten, besteht eines Ihrer Probleme darin, dass zwischen Ihren Array-Elementen kein Komma (,) vorhanden ist. Wie so:

Array 
(
[0] => item Object([id] => 123 [size_id] => 2), 
[1] => item Object([id] => 123 [size_id] => 3) 
) 

bin ich nicht vertraut mit dem ‚item Object (...‘ Syntax, die Sie verwenden, so dass ich nicht viel helfen Vergangenheit, was habe ich schon gesagt,

.

auch wie die Antwort oben, Ihr Test schließt beiden Objekte, weil id auf beiden ist 123

Verwandte Themen