157 votes

Convertir un objet stdClass en tableau en PHP

Je récupère l'identifiant du post à partir de postmeta comme suit :

$post_id = $wpdb->get_results("SELECT post_id FROM $wpdb->postmeta WHERE (meta_key = 'mfn-post-link1' AND meta_value = '". $from ."')");

quand j'essaie print_r($post_id); J'ai un tableau comme ceci :

Array
(
    [0] => stdClass Object
        (
            [post_id] => 140
        )

    [1] => stdClass Object
        (
            [post_id] => 141
        )

    [2] => stdClass Object
        (
            [post_id] => 142
        )

)

et je ne sais pas comment le parcourir, et comment pourrais-je obtenir un tableau comme ceci

Array
(
    [0]  => 140

    [1] => 141

    [2] => 142

)

Des idées sur comment je pourrais faire cela?

1voto

decebal Points 558

Utiliser ArrayObject de Std ou construire le vôtre

(new \ArrayObject($existingStdClass))

vous pouvez utiliser la méthode intégrée de la nouvelle classe:

getArrayCopy()

ou passer le nouvel objet à

iterator_to_array

1voto

varun sharma Points 424

Supposons que $post_id est un tableau de $item

$post_id = array_map(function($item){

       return $item->{'post_id'};

       },$post_id);

texte fort

0voto

Cyborg Points 1217

J'ai une fonction myOrderId($_GET['ID']); qui renvoie un OBJ multidimensionnel en tant que chaîne de caractères.

Aucune des autres 1 lignes n'a fonctionné pour moi.

Ceux-ci ont fonctionné :

$array = (array)json_decode(myOrderId($_GET['ID']), True);

$array = json_decode(json_decode(json_encode(myOrderId($_GET['ID']))), True);

0voto

RGriffiths Points 2219

J'avais un problème avec ceci car mon stdClass contenait à plusieurs reprises des stdClass à l'intérieur. Cette fonction convertit de manière récursive tous les éléments en tableau :

$newArray = objectToArray($oldArray)

function objectToArray($data) {
    // Si l'élément en cours d'examen est un objet, le convertir en tableau
    if(is_object($data)) {
      $data = get_object_vars($data);
    }
    // Si l'élément est un tableau, itérer à travers et appeler à nouveau la fonction pour chacun des éléments
    if(is_array($data)) {
        foreach($data as $key=>$value){
            $data[$key] = objectToArray($value);
        }
    }
    return $data;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X