web-dev-qa-db-fra.com

Convertit un objet stdClass en tableau dans PHP

Je récupère post_id de postmeta en tant que:

$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 celui-ci:

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 celui-ci

Array
(
    [0]  => 140


    [1] => 141


    [2] => 142

)

Une idée de comment je peux faire ça?

101
Dinesh

Le moyen le plus simple est d’encoder JSON avec votre objet, puis de le décoder de nouveau dans un tableau:

$array = json_decode(json_encode($object), True);

Ou si vous préférez, vous pouvez également parcourir l’objet manuellement:

foreach ($object as $value) 
    $array[] = $value->post_id;
210
Amal Murali

Très simple, commencez par transformer votre objet en objet JSON, cela retournera une chaîne de votre objet dans un représentant JSON.

Prenez ce résultat et décodez-le avec un paramètre supplémentaire, true, où il sera converti en tableau associatif.

$array = json_decode(json_encode($oObject),true);
55
Rey Ramos

Essaye ça:

$new_array = objectToArray($yourObject);

function objectToArray($d) 
{
    if (is_object($d)) {
        // Gets the properties of the given object
        // with get_object_vars function
        $d = get_object_vars($d);
    }

    if (is_array($d)) {
        /*
        * Return array converted to object
        * Using __FUNCTION__ (Magic constant)
        * for recursive call
        */
        return array_map(__FUNCTION__, $d);
    } else {
        // Return array
        return $d;
    }
}
20

Vous pouvez convertir un objet std en tableau comme ceci:

$objectToArray = (array)$object;
12
Dinesh Kaswan

Pour les tableaux unidimensionnels:

$array = (array)$class; 

Pour un tableau multidimensionnel:

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

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

Essayez avec l'extrait de code suivant.

/*** cast the object ***/    
foreach($stdArray as $key => $value)
{
    $stdArray[$key] = (array) $value;
}   
/*** show the results ***/  
print_r( $stdArray );
6
NJInamdar
$wpdb->get_results("SELECT ...", ARRAY_A);

ARRAY_A est un argument "type_sortie". Il peut s'agir d'une des quatre constantes prédéfinies (par défaut, OBJECT):

OBJECT - result will be output as a numerically indexed array of row objects.
OBJECT_K - result will be output as an associative array of row objects, using first columns values as keys (duplicates will be discarded).
ARRAY_A - result will be output as an numerically indexed array of associative arrays, using column names as keys.
ARRAY_N - result will be output as a numerically indexed array of numerically indexed arrays.  

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

5
Vlad

Vous pouvez essayer ceci:

$aInitialArray = array_map(function($oObject){
    $aConverted = get_object_vars($oObject);
    return $aConverted['post_id'];
}, $aInitialArray);
3
Sajuna Fernando

Supposons que $ post_id est un tableau de $ item

$post_id = array_map(function($item){

       return $item->{'post_id'};

       },$post_id);

texte fort

1
varun sharma

Utiliser ArrayObject de Std ou construire le vôtre

(new\ArrayObject ($ existingStdClass))

vous pouvez utiliser la méthode de compilation sur la nouvelle classe:

getArrayCopy ()

ou passez le nouvel objet à

iterator_to_array

1
Decebal

si vous avez un tableau et que l'élément de tableau est un élément stdClass, c'est la solution

`foreach($post_id as $key=>$item){

$post_id[$key]= (array)$item;
}`

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

1
softnwords