Преобразование массива из ключа / значения в многомерный - PullRequest
0 голосов
/ 16 августа 2011

это может показаться довольно тривиальным вопросом, прошу прощения за мое невежество.Все еще изучаю манипуляции с массивами ...

У меня есть приложение CakePHP, которое отправляет массив на мой контроллер для сохранения.Мне нужно как-то переформатировать отправленный массив, чтобы он мог правильно обрабатываться поведением Cake Save.

Отправленный массив:

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 
) 

ЖелаемыйМассив:

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 
        )  
    )  
)

Спасибо, что нашли время посмотреть.


РЕДАКТИРОВАТЬ:

Я только что понялЯ пропустил тот факт, что если массив имеет [id] => 0, то его нужно игнорировать.Это был мой основной камень преткновения.Извиняюсь.Я надеюсь, что редакция прояснит мою проблему лучше.

решено

Спасибо за вашу помощь, ребята.Я смог придумать решение сам.Вот что я придумал.

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++;
            }
        }   
    }
}   

Ответы [ 2 ]

1 голос
/ 16 августа 2011
$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++;
 }
}
1 голос
/ 16 августа 2011

Примерно так должно работать, но только для вашего примера:

$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
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...