Rij/value uit multidimensional array gooien

Status
Niet open voor verdere reacties.

raymond88

Gebruiker
Lid geworden
24 feb 2010
Berichten
287
Ik heb een multidimensional array, en die heeft stdClass object erin zitten. Ik wil als het id, welk staat in de array_remove, met het in deze multidimensional array object id overeenkomt, deze ge-unset wordt. Nou heb ik het heel "dirty" opgelost, maar dat is natuurlijk de bedoeling niet. Ik faal om dit goed te schrijven. Heb ook al iets geprobeerd met flip array, maar dat werkt niet met zo'n "diepe" arrays. Hoor het graag van iemand!

PHP:
$array_remove = array('1', '3'); //bijv.
foreach ($good_array as $key => $value) {
    foreach ($good_array[$key] as $key1 => $value1) {
        foreach($good_array[$key][$key1] as $key2 => $value2){
            if($key2 == 'id'){
                if (in_array($value2, $array_remove )){
                    unset($good_array[$key][$key1]);
                }
            }
        }
    }
}
 
Als je weet hoe een key heet, kun je er gewoon rechtstreeks naar verwijzen, ook bij een stdClass object.

PHP:
$remove_array = array( 1, 3 );
foreach( $top_array as $key => $value ) {
  if ( in_array( $value->id, $remove_array ) ) {
    unset( $top_array( $key );
  }
}

Als je de top array keys gelijksteld aan de ids van de objects die er in zitten (iets wat alleen mogelijk is als de ids uniek zijn) dan wordt het nog veel makkelijker:

PHP:
$remove_array = array( 1, 3 );
foreach( $remove_array as $remove ) {
  unset( $top_array[ $remove ] );
}
 
Je eerste voorbeeld was niet helemaal goed, maar heb er wel iets uit kunnen halen! Het probleem is dat de array best "diep" is. Dit werkt nu ook;

PHP:
$array_remove = array('1', '3'); //bijv.
foreach ($good_array as $key => $value) {
    foreach ($good_array[$key] as $key1 => $value1) {
        if (in_array($value1->id, $array_remove) ) {
            unset($good_array[$key][$key1]);
          }
    }
}

Ziet er natuurlijk veel beter uit dan hetgeen wat ik voorheen had. Ik kwam niet achter de notatie, maar door jou nu wel :)
De eerste array heeft al key 0 en key 1 enzo, dus die moeten ook doorlopen worden. Ik denk niet dat deze verder nog korter kan, wel? Of althans, op een betere/mooiere manier? Hoop dat ik voldoende info geef zo :)
 
Nee veel korter dan dit wordt het niet.
Je kunt hoogstens $good_array[$key] nog vervangen door $value op regel 3, das iets logischer en leesbaarder, maar verder blijft het hierbij als je idd de array op deze manier opgebouwd hebt (ik had em iets anders begrepen :))
 
Yes, heel erg bedankt. We gaan natuurlijk allemaal voor een zo net mogelijke code! :)
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan