Работа с многомерным массивом и объектами в php - PullRequest
0 голосов
/ 04 января 2010

Я уже опубликовал похожую проблему, и она была решена, но сейчас я пытаюсь работать с массивом объектов и не знаю, как решить эту проблему:

Итак, у меня есть массив, похожий на этот:

array(10) {
  [0]=>
  object(VO)#6 (35) {
    ["eventID"]=>
    string(1) "1"
    ["eventTitle"]=>
    string(7) "EVENT 1"
    ["artistID"]=>
    string(1) "1"
    ["artistName"]=>
    string(8) "ARTIST 1"
    ["artistDescription"]=>
    string(20) "ARTIST 1 description"
    // etc.
  }
  [1]=>
  object(VO)#7 (35) {
    ["eventID"]=>
    string(1) "1"
    ["eventTitle"]=>
    string(7) "EVENT 1"
    ["artistID"]=>
    string(1) "2"
    ["artistName"]=>
    string(8) "ARTIST 2"
    ["artistDescription"]=>
    string(20) "ARTIST 2 description"
    // etc.
  }
  [2]=>
  object(VO)#8 (35) {
    ["eventID"]=>
    string(1) "1"
    ["eventTitle"]=>
    string(7) "EVENT 1"
    ["artistID"]=>
    string(1) "3"
    ["artistName"]=>
    string(8) "ARTIST 3"
    ["artistDescription"]=>
    string(20) "ARTIST 3 description"
    // etc.
  }
  [3]=>
  object(VO)#9 (35) {
    ["eventID"]=>
    string(1) "2"
    ["eventTitle"]=>
    string(7) "EVENT 2"
    ["artistID"]=>
    string(1) "5"
    ["artistName"]=>
    string(8) "ARTIST 5"
    ["artistDescription"]=>
    string(20) "ARTIST 5 description"
    // etc.
  }
  [4]=>
  object(VO)#10 (35) {
    ["eventID"]=>
    string(1) "2"
    ["eventTitle"]=>
    string(7) "EVENT 2"
    ["artistID"]=>
    string(1) "7"
    ["artistName"]=>
    string(8) "ARTIST 7"
    ["artistDescription"]=>
    string(20) "ARTIST 7 description"
    // etc.
  }
//etc.
}

И мне нужно отформатировать его следующим образом:

array(2) {
  [1]=>
  object(VO)#6 (9) {
    ["eventID"]=>
    string(1) "1"
    ["eventTitle"]=>
    string(7) "EVENT 1"
    ["artists"]=>
    array(3) {
      [1]=>
      array(2) {
        ["artistName"]=>
        string(8) "ARTIST 1"
        ["artistDescription"]=>
        string(20) "ARTIST 1 description"
      }
      [2]=>
      array(2) {
        ["artistName"]=>
        string(8) "ARTIST 2"
        ["artistDescription"]=>
        string(20) "ARTIST 2 description"
      }
      [2]=>
      array(2) {
        ["artistName"]=>
        string(8) "ARTIST 3"
        ["artistDescription"]=>
        string(20) "ARTIST 3 description"
      }
    }
  }
  [2]=>
  object(VO)#7 (9) {
    ["eventID"]=>
    string(1) "2"
    ["eventTitle"]=>
    string(7) "EVENT 2"
    ["artists"]=>
    array(3) {
      [1]=>
      array(2) {
        ["artistName"]=>
        string(8) "ARTIST 5"
        ["artistDescription"]=>
        string(20) "ARTIST 5 description"
      }
      [2]=>
      array(2) {
        ["artistName"]=>
        string(8) "ARTIST 7"
        ["artistDescription"]=>
        string(20) "ARTIST 7 description"
      }
    }
  }
}

Спасибо за любую помощь!

Ответы [ 2 ]

1 голос
/ 04 января 2010

Во-первых, как вы оказались с этими объектами? Разве вы не можете создавать объекты так, как вы этого хотите?

В любом случае вы можете сделать

$in = array(0 => $obj1, 1 => $obj2, ...);
$out = array();
foreach($in as $obj) {
  if(isset($out[$obj->eventID]) {
    $out[$obj->eventID]->artists[] = array('artistName' => $obj->artistName, 'artistDescription' => $obj->artistDescription);
  } else {
    $out[$obj->eventID] = $obj;
    $obj->artists = array(
      array('artistName' => $obj->artistName, 'artistDescription' => $obj->artistDescription)
    );

    unset($obj->artistName);
    unset($obj->artistDescription);
  }
}

// $out contains your object
1 голос
/ 04 января 2010

Модифицированная версия ответа на ваш предыдущий вопрос - будет ли это делать?

<code><?php
$output = array();

foreach($resultset as $event)
{

   $eventId = $event->eventID;
   $artistId = $event->artistID;

   if (!isset($output[$eventId]))
   {
      $output[$eventId] = new stdClass();

      $output[$eventId]->eventTitle = $event->eventTitle;
      $output[$eventId]->eventID = $event->eventID;
   }

   if (!isset($output[$eventId]->artists)) $output[$eventId]->artists = array();

   $output[$eventId]->artists[$artistId] = array();
   $output[$eventId]->artists[$artistId]['artistID'] = $artistId;
   $output[$eventId]->artists[$artistId]['artistName'] = $event->artistName;
   $output[$eventId]->artists[$artistId]['artistDescription'] = $event->artistDescription;
}
echo '<pre>' . print_r($output,true) . '
';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...