2010-09-21 3 views
0

У меня есть этот объект:Append объект к другому объекту в PHP

foreach(range(1,$oc->num_users) as $num) { 
    $user = 'user' . $num; 
    $$user = mysql_fetch_object(mysql_query("SELECT user".$num.", user".$num."_ready, FROM oc_db WHERE leader='".$_SESSION['username']."' ")); 

Это дает объекты, названные user1..X

позже у меня есть Двойники функции, как это, где я использую $$user->$user, которые представляют имя пользователя для подключения к db для получения дополнительной информации.

$$user = mysql_fetch_object(mysql_query("SELECT x, y, z FROM user_db WHERE username='".$$user->$user."' ")); 

Это также делает объекты, названные user1..X, но вместо того, чтобы заменить объект, созданный ранее, я хочу, чтобы добавить эти значения к объекту, я создал в первой функции. $$user - это имя объекта. Я хотел бы сделать что-то вроде $$user .= fetch_object в последней функции, но, конечно, это не так просто.

+1

Рассматривали ли вы использование массивов? '$ user [1..x] ['stuff']', '$ user [1..x] ['otherstuff']' – fredley

+0

И это не единственный звонок звонка. Например. отправляя один структурно идентичный запрос, кроме пользователя. $ num part на строку, которую вы хотите получить, является ... субоптимальной. И даже имея '$ oc-> num_users' ... да, может быть, но может также быть ненужным, может быть, даже подверженным ошибкам. Возможно, вам стоит описать проблему, которую вы хотите решить, и попросить хорошее/эффективное решение. – VolkerK

ответ

1

Для того, чтобы добавить один объект к другому нужно просто перебрать первый объект, а затем присвоить каждое свойство, которое вы найдете на второй:

$tmp = mysql_fetch_object(mysql_query("SELECT x, y, z FROM user_db WHERE username='".$$user->$user."' ")); 

foreach ($tmp as $key => $value) { 
    $$user->$key = $value; 
} 
0

В нескольких отступлениях, если вы пытаетесь для доступа к объекту user объекта, вы должны использовать $$user->user, так как $$user->$user будет пытаться получить доступ к пронумерованному свойству (например, для объекта $user12, вы пытаетесь получить доступ к $user12->user12). Я бы также подумал об использовании массива, как предположил Фредли (т. Е. Использовать $user[$num] вместо $user = 'user'.$num).

Подойти свой вопрос, вместо того, чтобы использовать оператор присваивания в .= конкатенации, вы можете попробовать добавить метод к вашему user класса, такие как append, а затем использовать его для добавления сгружен объекта к текущему объекту, как $user->append(fetch_object(...));. В методе append вы можете определить свои собственные правила для добавления добавленного объекта в ваш текущий пользовательский объект.

Смежные вопросы