|
|
|
| Есть такой объект:
object(stdClass)#28 (15) {
["id_cars"]=>
string(1) "2"
["category"]=>
...
}
|
Как получить значение первого элемента объекта по аналогии с массивом $array[0] | |
|
|
|
|
|
|
|
для: OLi
(12.10.2012 в 00:21)
| | Как я понимаю у вас ассоциативный массив и сделать это напрямую вы не сможете. Думаю надо foreach использовать.
Простые массивы и списки в PHP
При обращении к элементам простых индексируемых массивов используется целочисленный индекс, определяющий позицию заданного элемента.
Ассоциативные массивы в PHP
Ассоциативные массивы особенно удобны в ситуациях, когда элементы массива удобнее связывать со словами, а не с числами. Итак, массивы, индексами которых являются строки, называются ассоциативными массивами. | |
|
|
|
|
|
|
|
для: OLi
(12.10.2012 в 00:21)
| | первый элемент объекта - вообще не имеет смысла выражение... Объект - это далеко не аналогия массива.
Если у вас есть в объекте поле, содержащее массив нужных вам данных - пишите метод, просто возвращающий этот массив. А далее уже по ситуации - либо обход foreach, как уже ответили, либо извлечение первого члена с его уничтожением array_shift'ом | |
|
|
|
|
|
|
|
для: Jackson
(13.10.2012 в 12:39)
| | Сделал так:
$array = (array)($object); $array[0];
|
| |
|
|
|
|
|
|
|
для: OLi
(14.10.2012 в 02:02)
| | Вашей задачи не знаю, но то что вы сделали - чревато последствиями. т.к. простое изменение порядка свойств объекта вызовет неверную работу вашего скрипта.
В объекте нет понятия "первый" или "последний" элемент, есть понятие свойства. | |
|
|
|
|
|
|
|
для: speedsoft
(14.10.2012 в 17:23)
| | Если я правильно понял, то есть массив объектов b, у которых есть метод d(), наприаер.
$a[] = new b(1);
$a[] = new b(2);
$a[] = new b(3);
|
То к первому элементу массива объектом можно обратиться так и вызвать метод дэ:
| |
|
|
|
|
|
|
|
для: Enter
(14.10.2012 в 21:15)
| | Неа, человек ясно написал, что у него есть объект (один) с рядом свойств и нужно обратиться к ним как к массиву. | |
|
|
|
|
|
|
|
для: speedsoft
(14.10.2012 в 21:36)
| | А, ну тогда так можно:
<?
class Posts {
public $lalala = 1;
public $tratata = 2;
public $blablabla = 3;
protected $ggg = 'ggg';
public function getit(){
return $this->ggg;
}
}
$posts = new Posts();
$array = (array)$posts; //ассоциативный массив
//делаем из ассоциативного простой, если надо можно и функцией, лень искать в мануале
$i=0;
foreach ($array as $k=>$v){
$nr[$i] = $v;
$i++;
}
var_dump($nr);
?>
|
| |
|
|
|
|
|
|
|
для: Enter
(14.10.2012 в 21:50)
| | через преобразование (array) ТС сделал, но проблема же будет в том есть ваш класс сделать
class Posts {
public $tratata = 2;
public $lalala = 1;
public $blablabla = 3;
protected $ggg = 'ggg';
public function getit(){
return $this->ggg;
}
}
|
фактически ничего не изменилось. т.к. не важно "красный печатающий принтер" или "печатающий красный принтер". и "красный" и "печатающий" это свойства объекта "принтер". Но вот $printer[0] после преобразования уже вернет другое свойство. А это и будет проблемой ТС, если не уследить. Если очень хочется преобразовать свойства в массив, то лучше мне кажется будет переопределить магический метод __toString(), а в нем вручную сформировать массив из нужных свойств в нужном порядке. | |
|
|
|
|
|
|
|
для: speedsoft
(14.10.2012 в 22:00)
| | __toString()-то зачем переопределять? Он же существует для того, чтобы возвращать строки.
Но, возвращаясь к строгому контролю, то можно написать такой метод:
<?
public function returnArray(){
$array[0] = $this->lalala;
$array[1] = $this->tratata;
$array[2] = $this->blablabla;
return $array;
}
?>
|
| |
|
|
|
|
|
|
|
для: Enter
(14.10.2012 в 22:14)
| | Именно так я и предложил. просто в __toString(). Но именно с ним, согласен, промахнулся, Спасибо что поправили. | |
|
|
|
|
|
|
|
для: speedsoft
(14.10.2012 в 23:07)
| | Можно, конечно, разбивать строку на массивы, а это уже.. сами понимаете.. | |
|
|
|
|
|
|
|
для: OLi
(14.10.2012 в 02:02)
| | возможно, стоит отказаться от объектов? что то сдается мне, не совсем вы по назначению их используете... | |
|
|
|