Подтвердить что ты не робот

Преобразование массива и объектов в массив в чистый массив

Мой массив похож:

Array
(
    [0] => stdClass Object
        (
            [id] => 1
            [name] => demo1
        )
    [1] => stdClass Object
        (
            [id] => 2
            [name] => demo2
        )
    [2] => stdClass Object
        (
            [id] => 6
            [name] => otherdemo
        )
)

Как преобразовать весь массив (включая объекты) в чистый многомерный массив?

4b9b3361

Ответ 1

Вы пробовали приведение типов?

$array = (array) $object;

На самом деле есть еще один трюк

$json  = json_encode($object);
$array = json_decode($json, true);

См. json_encode в руководстве по PHP, второй параметр называется:

ассоциативный

Когда TRUE, возвращенные объекты будут преобразованы в ассоциативные массивы.

Это именно то, что вы ищете.

Вы также можете попробовать: Преобразовать объект в массив с помощью PHP (phpro.org)

Ответ 2

Вы можете использовать array_walk для преобразования каждого элемента из объекта в массив:

function convert(&$item , $key)
{
   $item = (array) $item ;
}

array_walk($array, 'convert');

Ответ 3

Вы должны бросить все объекты, что-то вроде:

$result = array();
foreach ($array as $object)
{
    $result[] = (array) $object
}

Ответ 4

Как вы используете ООП, самым простым методом было бы заставить код преобразовать себя в массив к самому классу, тогда вы просто вызываете этот метод и имеете возвращаемый массив, заполняющий исходный массив.

class MyObject {

    private $myVar;
    private $myInt;

    public function getVarsAsArray() {

        // Return the objects variables in any structure you need
        return array($this->myVar,$this->myInt);

    }

    public function getAnonVars() {

        // If you don't know the variables
        return get_object_vars($this);
    }
}

Смотрите http://www.php.net/manual/en/function.get-object-vars.php для информации по get_object_vars()

Ответ 5

Просто используйте это:

json_decode(json_encode($yourArray), true);

Ответ 6

Предполагая, что вы хотите получить этот формат чистого массива:

Array
(
  [1] => "demo1",    
  [2] => "demo2",
  [6] => "otherdemo",
)

Тогда я бы сделал:

$result = array();
foreach ($array as $object)
{
    $result[$object->id] = $object->name
}

(edit) На самом деле то, что я искал, возможно, не то, что искали OP. Может быть полезным для других поисковиков.