key работает только с именными. Если просто номер, то выдает "". Можно ли как-нибудь заставить её и их воспринимать ?
непонятно - что вы хотите? если числовые индексы - там и узнавать ничего не надо - индекс- он и есть число
Наверное, у меня проблемы с оператором foreach. Пытаюсь написать функцию, которая переводила бы элементы массив в массив из массивов. Код (Text): function ArrayForObjects($ObjMass){ $massacra=[]; foreach ($ObjMass as $elem){ $massacra[key($elem)]=(array)$elem; } return $massacra; } Если элемент не именной а номерной, то key($elem) вместо номера выдает "", читай - из номерных элементов запишется только значение последнего. Что с этим можно сделать ?
А чЁ as $key=>$value тут не работает? Если $ObjMass – это объект с итератором (ХЗ, что означает «элементы массив»), есть iterator_to_array.
Перечитайте на досуге: "Управляющая конструкция foreach". Спойлер Кроме того: То есть, $value - просто переменная. Потому и получаете пустую строку, применяя к ней функцию key().
PHP: trait Arrayable { public function toArray() { $data = []; foreach($this as $property => $value) { $data[$property] = $value; } return $data; } } class Test { use Arrayable; public $public_one = 1; public $public_two = 2; protected $protected = 3; private $private = 4; } $test = new Test; var_dump( json_decode(json_encode($test), true)); // только публичные свойства var_dump( (array) $test); // ... глянь сам var_dump( $test->toArray() ); // все свойства