2011-08-16 1 views
0

cela peut sembler une question plutôt triviale, s'il vous plaît excuser mon ignorance. Toujours en train de manipuler le tableau ...Transformer tableau de clé/valeur à multi-dimensionnelle

J'ai une application CakePHP qui envoie un tableau à mon contrôleur pour être sauvegardé. J'ai besoin de reformater en quelque sorte le tableau envoyé afin qu'il puisse être traité correctement par le comportement Enregistrer de Cake.

Le tableau est affiché:

Array ( 
     [788] => Array ([id] => 788) 
     [787] => Array ([id] => 787) 
     [786] => Array ([id] => 0) 
     [785] => Array ([id] => 0) 

     [value_1] => 0 

     [analysed_date] => Array ( 
      [month] => 08 
      [day] => 16 
      [year] => 2011 
     ) 

     [job_id] => 34 
) 

Tableau désiré:

Array ( 
    [0] => Array ( 
     [id] => 788 
     [value_1] => 0 
     [analysed_date] => Array ( 
      [month] => 08 
      [day] => 16 
      [year] => 2011 
     ) 
    ) 
    [1] => Array ( 
     [id] => 787 
     [value_1] => 0 
     [analysed_date] => Array ( 
      [month] => 08 
      [day] => 16 
      [year] => 2011 
     ) 
    ) 
) 

Merci d'avoir pris le temps de regarder.


EDIT:

Je viens de réaliser que j'omis le fait que si le tableau a un [id] => 0 qu'il doit être ignoré. C'était ma principale pierre d'achoppement. Excuses. J'espère que la modification clarifie mieux mon problème.

SOLVED

Merci pour votre aide les gars. J'ai été capable de trouver la solution par moi-même. Voici ce que j'ai trouvé.

foreach($org_array as $key => $value){ 
    if(is_array($value)){ 
     if(isset($value['id'])){ 
      if($value['id'] != 0) { 
       $data[$i] = array(
        'id' => $value['id'], 
        'value_1'=> $value_1, 
        'analysed_date' => $date 
       ); 
       $i++; 
      } 
     } 
    } 
} 

Répondre

1

Quelque chose comme cela devrait fonctionner, mais seulement pour votre exemple:

$array_keys = array_keys($org_array); 
$new_array = array(); 
foreach ($array_keys as $key) 
{ 
    if (is_int($key)) 
    { 
    $new_array[] = array(
     "id" => $key, 
     "value1" => $org_array["value1"], 
     "analysed_date" => $org_array["analysed_date"] 
    ); 
    // you might want to loop throught the original array to get all non-integer key values instead of hard-coding it 
    } 
} 
1
$main = Array ( 
     [788] => Array ([id] => 788) 
     [787] => Array ([id] => 787) 
     [786] => Array ([id] => 786) 
     [785] => Array ([id] => 785) 

     [value_1] => 0 

     [analysed_date] => Array ( 
      [month] => 08 
      [day] => 16 
      [year] => 2011 
     ) 

     [job_id] => 34 
) 

$analysed_date = $main['analysed_date']; 
$value1 = $main['value_1']; 

$result = array(); 
$i=0; 
foreach($main as $key=>$value) 
{ 
if(is_numeric($key) 
{ 
    $result[$i]=array(); 
    $result[$i]['id']=$key; 
    $result[$i]['value_1']=$value1; 
    $result[$i]['analysed_date']=$analysed_date; 
    $i++; 
} 
} 
Questions connexes