problème: manipulation d'array

Eléphanteau du PHP | 17 Messages

08 juil. 2010, 21:21

Salut, j'ai petit souci avec mon array :oops: j'aimerais réorganiser mon array mais je vois pas comment faire. J'ai essayé de diverses façon avec des foreach mais je n'arrive pas à obtenir le résultat escompté...


En fait j'utilise une api (flickr) qui me renvoit un array qui se présente comme ça:
(notez qu'en deuxieme couche, les clés constituées d'une suite de chiffres reprennent la valeur du flickrpicID en dernière couche)
Array
(
    [0] => Array
        (
            [4774155148] => Array
                (
                    [service_id] => 84
                    [flickrPicId] => 4774155148
                    [photolink] => http://farm5.static.flickr.com/4096/4774155148_39f95ee3a4.jpg
                    [photodate] => 1278584637
                    [user_id] => 44
                )
            [4774146102] => Array
                (
                    [service_id] => 84
                    [flickrPicId] => 4774146102
                    [photolink] => http://farm5.static.flickr.com/4099/4774146102_2f30c5356c.jpg
                    [photodate] => 1278584192
                    [user_id] => 44
                )
            [4774099090] => Array
                (
                    [service_id] => 84
                    [flickrPicId] => 4774099090
                    [photolink] => http://farm5.static.flickr.com/4079/4774099090_92e870e2ce.jpg
                    [photodate] => 1278581958
                    [user_id] => 44
                )
            [4748347869] => Array
                (
                    [service_id] => 84
                    [flickrPicId] => 4748347869
                    [photolink] => http://farm5.static.flickr.com/4120/4748347869_bed829a760.jpg
                    [photodate] => 1277902930
                    [user_id] => 44
                )
            [4748347723] => Array
                (
                    [service_id] => 84
                    [flickrPicId] => 4748347723
                    [photolink] => http://farm5.static.flickr.com/4115/4748347723_6af7939953.jpg
                    [photodate] => 1277902926
                    [user_id] => 44
                )
        )
    [1] => Array
        (
            [4723647573] => Array
                (
                    [service_id] => 84
                    [flickrPicId] => 4723647573
                    [photolink] => http://farm2.static.flickr.com/1175/4723647573_59afdc60fe.jpg
                    [photodate] => 1277208645
                    [user_id] => 2
                )
            [4724299716] => Array
                (
                    [service_id] => 84
                    [flickrPicId] => 4724299716
                    [photolink] => http://farm2.static.flickr.com/1407/4724299716_8a54a35fd7.jpg
                    [photodate] => 1277208643
                    [user_id] => 2
                )
            [4723647485] => Array
                (
                    [service_id] => 84
                    [flickrPicId] => 4723647485
                    [photolink] => http://farm2.static.flickr.com/1344/4723647485_4b31be7bee.jpg
                    [photodate] => 1277208642
                    [user_id] => 2
                )
        )
  [2]=> etc etc...
)
Je voudrais obtenir ce résultat:
Array
(
    [4723647485] => Array
        (
            [2] =>array
                    (
                     [service_id] => 84
                     [flickrPicId] => 4723647485
                     [photolink] => http://farm2.static.flickr.com/1344/4723647485_4b31be7bee.jpg
                     [photodate] => 1277208642
                     [user_id] => 2
                    )   
        )
  // etc.. idem pour chaque flikrPicId, je ne veux plus de la première couche, les keys avec des valeurs numériques 0, 1, 2 etc (dans le premier quote pas celui ci)
en gros la première couche ce serait des keys qui sont la valeur du flickrPicId.
la deuxième couche ce serait le numero de l'user_id.
et en 3eme couche on remet toutes les infos telles quelles (oui ça se répète).
Et on fait ça pour chaque flickrPicId.

Ce problème me casse la tête, je suis encore loin d'être un pro du php, est ce qu'il y a une façon simple d'arriver au résultat escompté ou est-ce qu'il faut carrément créer une fonction?

ViPHP
ViPHP | 3607 Messages

09 juil. 2010, 09:54

Bonjour,
je n'ai pas trop compris pourquoi vouloir absolument garder la deuxième couche (id_user) dans ton résultat?
IL se peut qu'il y ai plusieurs utilisateurs par photo?

Bref voilà ce que ça donne:
<?php

$tab = array(
        array(
          '4774155148' => array
                (
                    'service_id' => 84,
                    'flickrPicId' => '4774155148',
                    'photolink' => 'http://farm5.static.flickr.com/4096/477 ... 5ee3a4.jpg',
                    'photodate' => 1278584637,
                    'user_id' => 44
                ),
            '4774146102' => array
                (
                    'service_id' => 84,
                    'flickrPicId' => '4774146102',
                    'photolink' => 'http://farm5.static.flickr.com/4099/477 ... c5356c.jpg',
                    'photodate' => 1278584192,
                    'user_id' => 44
                ),
            '4774099090' => array
                (
                    'service_id' => 84,
                    'flickrPicId' => '4774099090',
                    'photolink' => 'http://farm5.static.flickr.com/4079/477 ... 70e2ce.jpg',
                    'photodate' => 1278581958,
                    'user_id' => 44
                ),
            '4748347869' => array
                (
                    'service_id' => 84,
                    'flickrPicId' => '4748347869',
                    'photolink' => 'http://farm5.static.flickr.com/4120/474 ... 29a760.jpg',
                    'photodate' => 1277902930,
                    'user_id' => 44
                ),
            '4748347723' => array
                (
                    'service_id' => 84,
                    'flickrPicId' => '4748347723',
                    'photolink' => 'http://farm5.static.flickr.com/4115/474 ... 939953.jpg',
                    'photodate' => 1277902926,
                    'user_id' => 44
                )
        ),
        array
        (
            '4723647573' => array
                (
                    'service_id' => 84,
                    'flickrPicId' => '4723647573',
                    'photolink' => 'http://farm2.static.flickr.com/1175/472 ... dc60fe.jpg',
                    'photodate' => 1277208645,
                    'user_id' => 2
                ),
            '4724299716' => array
                (
                    'service_id' => 84,
                    'flickrPicId' => '4724299716',
                    'photolink' => 'http://farm2.static.flickr.com/1407/472 ... a35fd7.jpg',
                    'photodate' => 1277208643,
                    'user_id' => 2
                ),
            '4723647485' => array
                (
                    'service_id' => 84,
                    'flickrPicId' => '4723647485',
                    'photolink' => 'http://farm2.static.flickr.com/1344/472 ... be7bee.jpg',
                    'photodate' => 1277208642,
                    'user_id' => 2
                )
        )
);

$results=array();

// première couche
foreach($tab as $entry1){

  // seconde couche
  foreach($entry1 as $entry2){

    // création de l'entrée avec l'id de la photo
    if(!isset($results[$entry2['flickrPicId']])){
      $results[$entry2['flickrPicId']] = array();
    }

    // création de l'entrée avec l'id utilisateur
    if(!isset($results[$entry2['flickrPicId']][$entry2['user_id']])){
      $results[$entry2['flickrPicId']][$entry2['user_id']] = $entry2;
    }
  }
}

var_dump($tab,$results);
N'hésite à demander plus d'explications ;)