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?

7voto

Stack Overflow Points 189

Pour les tableaux unidimensionnels :

$array = (array)$class; 

Pour les tableaux multidimensionnels :

function stdToArray($obj){
  $reaged = (array)$obj;
  foreach($reaged as $key => &$field){
    if(is_object($field))$field = stdToArray($field);
  }
  return $reaged;
}

6voto

Infinity Points 880

Lors de la conversion d'un objet de classe STD en tableau. Cast l'objet en tableau en utilisant la fonction array de php.

Essayez avec le bout de code suivant.

/*** caster l'objet ***/    
foreach($stdArray as $key => $value)
{
    $stdArray[$key] = (array) $value;
}   
/*** afficher les résultats ***/  
print_r( $stdArray );

5voto

Vlad Points 3568
$wpdb->get_results("SELECT ...", ARRAY_A);

ARRAY_A est un argument "output_type". Il peut être l'une des quatre constantes prédéfinies (par défaut à OBJECT) :

OBJECT - le résultat sera renvoyé sous forme d'un tableau indexé numériquement d'objets de lignes.
OBJECT_K - le résultat sera renvoyé sous forme d'un tableau associatif d'objets de lignes, en utilisant les valeurs des premières colonnes comme clés (les doublons seront ignorés).
ARRAY_A - le résultat sera renvoyé sous forme d'un tableau indexé numériquement de tableaux associatifs, en utilisant les noms des colonnes comme clés.
ARRAY_N - le résultat sera renvoyé sous forme d'un tableau indexé numériquement de tableaux indexés numériquement.  

Voir : http://codex.wordpress.org/Class_Reference/wpdb

3voto

Sajuna Fernando Points 1304

Vous pouvez essayer ceci :

$aTableauInitial = array_map(function($oObjet){
    $aConverti = get_object_vars($oObjet);
    return $aConverti['post_id'];
}, $aTableauInitial);

2voto

softnwords Points 1

Si vous avez un tableau et que l'élément du tableau est un élément stdClass, voici la solution :

foreach($post_id as $key=>$item){
    $post_id[$key] = (array)$item;
}

maintenant, le stdClass a été remplacé par un tableau à l'intérieur du tableau en tant que nouvel élément de tableau

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