-1

An array contain data in following manner

$blog = array(
1 => array(
'blog_id' => 1,
'blog_year' => 2013),

2 => array(
'blog_id' => 2,
'blog_year' => 2013),

3 => array(
    'blog_id' => 3,
    'blog_year' => 2014),

4 => array(
    'blog_id' => 4,
    'blog_year' => 2014)
);

I want to display this data in following format.

2013: blog 1 blog 2

2014: blog 3 blog 4

Kindly help me, I'm copping this problem from many days.

hakre
  • 193,403
  • 52
  • 435
  • 836
Muzammil Ahmed
  • 77
  • 1
  • 3
  • 14
  • Can you change the format of the array at all or are you tied to that format? – Ding Jan 12 '15 at 06:10
  • I have a bulk data but I want to display in group with respect to years. – Muzammil Ahmed Jan 12 '15 at 06:11
  • Array ([0] => Array ( [blog_id] => 1 [year] => 2013 ) [1] => Array ( [blog_id] => 2 [year] => 2013 ) [2] => Array ( [blog_id] => 3 [year] => 2014 ) [3] => Array ( [blog_id] => 4 [year] => 2014 ) ) – Muzammil Ahmed Jan 12 '15 at 06:30
  • possible duplicate of [Able to see a variable in print\_r()'s output, but not sure how to access it in code](http://stackoverflow.com/questions/6322084/able-to-see-a-variable-in-print-rs-output-but-not-sure-how-to-access-it-in-c) – hakre Mar 29 '15 at 12:24

1 Answers1

0

You could do something like this. It should sort the multidimensional array primarily by blog_year and secondarily by blog_id.

<?php

$blog = array(
    2 => array(
        'blog_id' => 1,
        'blog_year' => 2013
    ),
    3 => array(
        'blog_id' => 4,
        'blog_year' => 2014
    ),
    1 => array(
        'blog_id' => 2,
        'blog_year' => 2013
    ),
    4 => array(
        'blog_id' => 3,
        'blog_year' => 2014
    )
);

usort($blog, function($a, $b) {
    if ($a['blog_id'] < $b['blog_id']) {
        return -1;
    } elseif  ($a['blog_id'] > $b['blog_id']) {
        return 1;
    } else {
        return strcmp($b['blog_year'], $a['blog_year']);
    }
});

$temp_year = '';
foreach($blog as $item){
    if($item['blog_year'] != $temp_year){
        echo ($temp_year != '') ? "\n":'';
        $temp_year = $item['blog_year'];
        echo $item['blog_year'] .':';
    }
    echo ' blog '. $item['blog_id'];
}

The output should be:

2013: blog 1 blog 2
2014: blog 3 blog 4
Ding
  • 3,065
  • 1
  • 16
  • 27