Nasıl bir nesne bir diziye dönüştürmek?

5 Cevap
<?php
   print_r($response->response->docs);
?>

Aşağıdaki çıkarır:

Array ( [0] => Object ( [_fields:private] => Array ( [id]=>9093 [name]=>zahir) Object ( [_fields:private] => Array ( [id]=>9094 [name]=>hussain)..)

Nasıl bu nesnenin bir diziye dönüştürebilirsiniz? Ben çıkış aşağıdaki istiyorum:

Array([0]=>([id]=>9093 [name]=>zahir) [1]=>([id]=>9094 [name]=>hussain)...)

Bu mümkün mü?

5 Cevap

Lütfen özellikleri, sınıf içinde bu çağrı ve sonuçlarını dönmelidir Özel bildirilen gibi, get_object_vars bakmak gerekir.

Dizeleri gibi ilkel veri tipleri o büyük çalışacaktır için, dikkatli olun, ama iç içe nesnelerle nasıl davranacağını bilmiyoruz.

Single-dimensional arrays

For converting single-dimension arrays, you can cast using (array) or there's get_object_vars, which Benoit mentioned in his answer.

// Cast to an array
$array = (array) $object;
// get_object_vars
$array = get_object_vars($object);

Bunlar, birbirinden biraz farklı çalışır. Eğer (nesnenin bir üye işlevi yani) geçiyoruz nesnenin kapsamında denir sürece Örneğin, get_object_vars sadece kamuya açık özelliklere sahip bir dizi döndürür. (array), diğer taraftan, dizide bozulmamış tüm kamu, özel ve korumalı üyeleri ile bir dizi artığını olsa tabii şimdi tüm kamu,.

Multi-dimensional arrays

Bir biraz kirli bir yöntem JSON kodlamak ve sonra tekrar bir dizi çözmek için PHP> = 5.2 'in yerel JSON fonksiyonlarını kullanmaktır. Ancak bu, özel ve korumalı üyeleri dahil değildir.

// The second parameter of json_decode forces parsing into an associative array
$array = json_decode(json_encode($object), true);

Alternatif olarak, aşağıdaki işlev here alınan ve döküm kullanmak için modifiye özel ve korunan üyeleri dahil bir dizi, bir nesneden dönüştürür:

function objectToArray ($object) {
    if(!is_object($object) && !is_array($object))
        return $object;

    return array_map('objectToArray', (array) $object);
}

Dikkat:

$array = (array) $object;

sığ bir dönüşüm ($ object-> InnerObject = new stdClass () bir nesne olarak kalır) ve json kullanarak çalışır ve geriye dönüştürerek ama performans sorunu ise iyi bir fikir değil yapar.

Ilişkilendirilebilir dizilerle dönüştürülmesi tüm nesneleri gerekiyorsa burada (nerede hatırlamıyorum itibaren kodu yırtık) bunu yapmak için daha iyi bir yoldur:

function toArray($obj)
{
    if (is_object($obj)) $obj = (array)$obj;
    if (is_array($obj)) {
        $new = array();
        foreach ($obj as $key => $val) {
            $new[$key] = toArray($val);
        }
    } else {
        $new = $obj;
    }

    return $new;
}

Hızlı bir şekilde JSON kodlama / kod çözme fonksiyonları davranışları dayanarak ilişkilendirilebilir diziler derinden iç içe nesneleri dönüştürmek olabilir:

$array = json_decode(json_encode($response->response->docs), true);
$array = json_decode(json_encode($object), true);

Bir nesne ile bir foreach yapmak için çeşitli yollar denemek ve BU gerçekten gördüğüm en kolay ve serin bir çözüm budur. Sadece bir satır :)