Построить динамический массив в PHP

Мне нужно создать массив, используя объект, используя другой формат/структуру

У меня есть:

$t = object()
$t > user = object()
$t > user > 0 (object) name = 'wilson';
$t > user > 0 (object) first = 'carl';

Мне нужно получить:

$t = array(
 name = wilson
 first name = phil

Вот что я пробовал и где я застрял

foreach($t as $a) { 
      foreach($a as $l) {
          $arr[$l->0->name] = $l->0->first; // line 10
      }
  }
  print_r($arr);

Теперь я получаю сообщение об ошибке:

Ошибка синтаксического анализа PHP: синтаксическая ошибка, неожиданное T_LNUMBER, ожидание T_STRING или T_VARIABLE или '{' или '$' в homework1-a-1.php в строке 10

Что я могу сделать, чтобы это исправить?


person natalia    schedule 30.12.2011    source источник
comment
Похоже на простую синтаксическую ошибку. Не вижу строку 10, поэтому понятия не имею.   -  person Phoenix    schedule 31.12.2011
comment
я поместил строку 10 в свое редактирование   -  person natalia    schedule 31.12.2011
comment
свойства объекта должны начинаться с символа. Однако я не понимаю, чего вы хотите добиться, потому что, похоже, вы немного перепутали объекты и массивы.   -  person KingCrunch    schedule 31.12.2011
comment
Можете ли вы сделать print_r($t); и вставить вывод?   -  person konsolenfreddy    schedule 31.12.2011
comment
Является ли частью задания то, что вам также необходимо построить объект? Если это так, убедитесь, что вы все сделали правильно при его построении, прежде чем переходить ко второй части, где вы конвертируете его в массив.   -  person hakre    schedule 31.12.2011
comment
Чтобы ответить только на синтаксическую ошибку (она где-то спрятана в руководстве), вам нужно использовать ->{'0'}-> вместо ->0->. Но я также думаю, что вам может понадобиться другой подход, это выглядит странно.   -  person mario    schedule 31.12.2011
comment
Что ты пытаешься сделать? Что такое $t? Код для $t вообще недействителен. Как вы хотите, чтобы $arr выглядело? Почему вы дважды повторяете $t?   -  person Rocket Hazmat    schedule 31.12.2011
comment
Это определенно 0 в $l->0->name и $l->0->first. Следовательно, unexpected T_LNUMBER. Является ли пользователь объектом со свойствами массива? Если да, то это будут $l[0]->name и $l[0]->first.   -  person Phoenix    schedule 31.12.2011


Ответы (2)


Ваш вопрос сбивает с толку. Вот что я понимаю:

У вас есть следующее:

  • $t, который является объектом.
  • $t->user, тоже объект.
  • $t->user[0]->name = 'wilson'
  • $t->user[0]->first = 'carl'

Вы говорите, что вам нужно получить:

  • $t->name = 'wilson'
  • $t->first = 'carl'

Вы говорите «фил» в вопросе, но данный объект $t не имеет отношения к «филу», поэтому я не знаю, появляется ли «фил» из воздуха или что.

Это правильный взгляд на проблему? Если это так, вам нужно уточнить это в вопросе. говорить $t > user > 0 (object) name не имеет смысла.

Извините, это «ответ», я просто не смог уместить все это в комментарий. Я удалю его, если вы уточните вопрос. Надеюсь, я не единственный, кого это смущает.

person Logan Serman    schedule 30.12.2011

$t = object()
$t > user = object()
$t > user > 0 (object) name = 'wilson';
$t > user > 0 (object) first = 'carl';

Это недействительный код PHP. Если вы хотите $t в формате, который вы показываете, просто сделайте следующее:

$t = array(
 'name' => 'wilson',
 'first name' => 'phil'
);

Теперь $t — это массив с ключами 'name' и 'first name'.

Ваш цикл foreach не имеет никакого смысла. $t — это массив из двух строк. Цикл по нему просто даст значения 'wilson' и 'phil'.

РЕДАКТИРОВАТЬ: Предполагая, что вам было дано $t, ваш цикл for должен выглядеть так:

foreach($t as $a) { 
      foreach($a as $l) {
          $arr[$l->{0}->name] = $l->{0}->first;
      }
  }

Вы не можете сделать $l->0. Вам нужно обернуть 0 в {}. $l->{0}.

person Rocket Hazmat    schedule 30.12.2011
comment
Дело в том, что это домашнее задание, объект дан, постройте из него массив. - person Madara's Ghost; 31.12.2011
comment
@Truth: Извините, вопрос был немного запутанным. Код для $t не имеет смысла, я понятия не имею, как выглядит $t. Затем он говорит, что хочет $t в определенном формате (который, как вы сказали, был задан), затем в своем цикле он ссылается на $arr. Так что я не уверен, чего он хочет. - person Rocket Hazmat; 31.12.2011