Tengo esta matriz de objetos ($grow):

class ArrayObject#48 (1) {
  private $storage =>
  array(4) {
    [0] =>
    class stdClass#84 (3) {
      public $id =>
      string(5) "1"
      public $name =>
      string(5) "dasdasd"
      public $pimba =>
      string(2) "kl"
    }
    [1] =>
    class stdClass#46 (3) {
      public $id =>
      string(5) "2"
      public $name =>
      string(5) "sadwqq"
      public $pimba =>
      string(2) "kl"
    }
    [2] =>
    class stdClass#83 (3) {
      public $id =>
      string(5) "3"
      public $name =>
      string(5) "bbbbbb"
      public $pimba =>
      string(2) "kl"
    }
    [3] =>
    class stdClass#43 (3) {
      public $id =>
      string(5) "3"
      public $name =>
      string(5) "aaaaaa"
      public $pimba =>
      string(2) "kl"
  }
}

No puedo usar array_map, siempre devuelve nulo . Creo que es porque private $storage pero no sé cómo solucionarlo.

array_push($arr, array_map(function($c) {
    return $c;
},$grow));
1
PlayHardGoPro 7 feb. 2020 a las 18:00

2 respuestas

La mejor respuesta

array_map espera una matriz como su segundo parámetro. Le está pasando un ArrayObject a él.

Deberá utilizar iterator_to_array para convertir ese objeto (que es un iterador, como implementa Traversable) en una matriz:

array_map(function ($c) {
  // ... do stuff with $c
  return $c;
}, iterator_to_array($grow))

Nota al margen: debe usar $array[] = $value; en lugar de array_push($array, $value); ya que es más práctico y rápido.

Por cierto, no estoy seguro de que quieras ingresar a tu matriz en este caso. Esto agregará una submatriz a su matriz $arr existente. Dependiendo de lo que intente hacer, array_merge puede ser lo que está buscando.

4
Jeto 7 feb. 2020 a las 15:11

Puedes probar de esta manera:

array_push($arr, array_map(function($c) {
    return $c;
},$grow->getArrayCopy()));

Puede verificar esto Doc. Espero ayudarte.

1
Dmitry 7 feb. 2020 a las 15:30