2016-01-07 2 views
0
х мерный

Это мой массив:PHP - генерировать мульти-массив

$arr = array(
    0 => array(
     'title' => 'test1', 
     'count' => 4, 
     'month' => 'jan-2015' 
    ), 
    1 => array(
     'title' => 'test2', 
     'count' => 10, 
     'month' => 'jan-2015' 
    ), 
    2 => array(
     'title' => 'test3', 
     'count' => 14, 
     'month' => 'jun-2015' 
    ), 
    3 => array(
     'title' => 'test4', 
     'count' => 45, 
     'month' => 'july-2015' 
    ), 
); 

Я преобразовать этот массив в нескольких мерного массив, как показано ниже:

$arr = array(
    'jan-2015' => array(
     0 => array(
     'title' => 'test1', 
     'count' => 4, 
    ), 
     1 => array(
     'title' => 'test2', 
     'count' => 10, 
    ), 
    ), 
    'jun-2015' => array(
    0 => array(
     'title' => 'test3', 
     'count' => 14, 
    ), 
    ), 
    'july-2015' => array(
    0 => array(
     'title' => 'test4', 
     'count' => 45, 
    ), 
    ), 
); 

Я пытался сделать это, как ожидалось, но, к сожалению, я не могу этого сделать. Есть ли другие решения для этого?

+0

Использование на петли вы можете сделать это, вы можете преобразовать массив в новый массив, используя цикл. –

+0

может предоставить пример кода? – Guru

+0

Покажите нам, что вы пробовали. SO не является бесплатной услугой кодирования. – Epodax

ответ

2

По вашей структуре данных:

$arr = array(
    0 => array(
     'title' => 'test1', 
     'count' => 4, 
     'month' => 'jan-2015' 
    ), 
    1 => array(
     'title' => 'test2', 
     'count' => 10, 
     'month' => 'jan-2015' 
    ), 
    2 => array(
     'title' => 'test3', 
     'count' => 14, 
     'month' => 'jun-2015' 
    ), 
    3 => array(
     'title' => 'test4', 
     'count' => 45, 
     'month' => 'july-2015' 
    ), 
); 

попробовать это:

$newArray = array(); 
foreach($arr as $key => $val) { 
    $newArray[$val['month']][] = $val; 
} 
echo '<pre>'.print_r($newArray,1).'</pre>'; 

Выход:

Array 
(
    [jan-2015] => Array 
     (
      [0] => Array 
       (
        [title] => test1 
        [count] => 4 
        [month] => jan-2015 
       ) 

      [1] => Array 
       (
        [title] => test2 
        [count] => 10 
        [month] => jan-2015 
       ) 

     ) 

    [jun-2015] => Array 
     (
      [0] => Array 
       (
        [title] => test3 
        [count] => 14 
        [month] => jun-2015 
       ) 

     ) 

    [july-2015] => Array 
     (
      [0] => Array 
       (
        [title] => test4 
        [count] => 45 
        [month] => july-2015 
       ) 

     ) 

) 
1

Используя ответ @Girish Patidar, Вы можете достичь этого:

$outputArr = array(); 
$to_skip = array(); 

foreach($arr as $row){ 
    $to_skip = $row; 
    unset($to_skip['month']); 
    $outputArr[$row['month']][] = $to_skip; 
} 

echo "<pre>"; 
print_r($outputArr); 
die; 
+0

@Guru, что вы имеете в виду, счет отличается. сравните мой результат с вашим выходом. –

1

Там можно было много способов сделать это. Пожалуйста, попробуйте это, если он работает для вас

<?php 
$newArr=NULL; 
foreach($arr as $array) 
{ 
    $temp=NULL; 
    $temp['title']=$array['title']; 
    $temp['count']=$array['count']; 

    $newArr[$array['month']][]=$temp; 
} 

var_dump($newArr); 
?> 
2

Вы можете использовать эту функцию:

function transform($input) { 
    // Extract months, and use them as keys, with value set to empty array 
    // The array_fill_keys also removes duilicates 
    $output = array_fill_keys(array_column($input, 'month'), array()); 

    foreach ($input as $element) { 
     $copy = $element; 
     // remove the month key 
     unset($copy["month"]); 
     // assign this to the month key in the output 
     $output[$element["month"]][] = $copy; 
    } 
    return $output; 
} 

Называйте это как это:

$arr = array(
    0 => array(
     'title' => 'test1', 
     'count' => 4, 
     'month' => 'jan-2015' 
    ), 
    1 => array(
     'title' => 'test2', 
     'count' => 10, 
     'month' => 'jan-2015' 
    ), 
    2 => array(
     'title' => 'test3', 
     'count' => 14, 
     'month' => 'jun-2015' 
    ), 
    3 => array(
     'title' => 'test4', 
     'count' => 45, 
     'month' => 'july-2015' 
    ), 
); 

print_r (transform($arr)); 

Выход:

Array 
(
    [jan-2015] => Array 
     (
      [0] => Array 
       (
        [title] => test1 
        [count] => 4 
       ) 
      [1] => Array 
       (
        [title] => test2 
        [count] => 10 
       ) 
     ) 
    [jun-2015] => Array 
     (
      [0] => Array 
       (
        [title] => test3 
        [count] => 14 
       ) 
     ) 
    [july-2015] => Array 
     (
      [0] => Array 
       (
        [title] => test4 
        [count] => 45 
       ) 
     ) 
) 
+0

Можете ли вы объяснить, почему это неверно? Он дает результат, указанный вами в вашем вопросе? Или я чего-то не хватает? – trincot

+0

Обратите внимание, что мой вывод соответствует указанному выходу, тогда как принятый ответ не указан (обратите внимание на наличие «месяца»). – trincot

Смежные вопросы