Как добавить значение в массив, если ключ один и тот же - PullRequest
1 голос
/ 25 мая 2011

У меня есть ассоциативный массив как

[name]->user1,
[class_code]->bsc,
[name]->user2,
[class_code]->msc,
[name]->user1,
[class_code]->mca

Теперь я хочу получить результат как

[name]->user1,
[class_code]->bsc,
mca
[name]->user2,
[class_code]->msc

Означает, что если имя совпадает, тогда добавьте код_класса к первому. Как мне это сделать? Мой массив

 [1] =stdClass Object
        ([class_code] =Maths
            [userid] =365
            [avatar] =default.jpg
            [username] =user2
        )

    [2] =stdClass Object
        (
            [class_code] =Maths
            [userid] = 364
            [avatar] =default.jpg
            [username] =user1
        )

 [3] =stdClass Object
        (
            [class_code] =MCA
            [userid] =364
            [avatar] =default.jpg
            [username] =user1
        )

    [4] =stdClass Object
        (
            [class_code] =MCA
            [userid] =365
            [avatar] =default.jpg
            [username] =user2
        ) 

Теперь, при отображении результата, я хочу отобразить записи для ex. user2 as

username:user2
avatar
classcode :MCA,Maths 

а не

username:user2
avatar
classcode :MCA
username:user2
avatar
classcode :Maths 

как я могу это сделать?

Ответы [ 4 ]

2 голосов
/ 25 мая 2011

Вы не можете иметь два значения с одним и тем же ключом. В противном случае php не будет знать, что вам дать, если вы попросите $ myarray ['name'].

Вместо этого вы можете использовать вложенные массивы.

например

[0]-> 
  [name]->user1,
  [class_code]->bsc,mca,
[1]->
  [name]->user2,
  [class_code]->msc

или вы могли бы сделать что-то вроде этого

[user1]->bsc, mca
[user2]->msc
0 голосов
/ 25 мая 2011

Вы можете сделать весь массив многомерным:

$users = array(
   0 = array(
       "name"=>"user1",
       "class_code"=>"bsc"
   ),
   1 = array(
       "name"=>"user2",
       "class_code"=>"msc"
   )
);

Получение значения:

$users[1][name]              // Returns 'user2'
$users[0][class_code]        // Returns 'bsc'

Циклическое переключение значений:

foreach($users as $user => $attributes) {
    echo "$user: $attributes[name] ($attributes[class_code])<br />";
}

/*
Prints:
    0: user1 (bsc)
    1: user2 (msc)
*/
0 голосов
/ 25 мая 2011

если [class_code] должен содержать строку, вы можете попробовать

$array[$key] .= $value;
0 голосов
/ 25 мая 2011

если вы хотите, чтобы оба значения были там, вам следует рассмотреть возможность использования массива там

array(
   "name"=>"user1,
   "class_code"=>"array('mca','bsc'),
   "name"=>"user2,
   "class_code"=>"msc"
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...