canpoint
canpoint

Reputation: 859

array grouping which contains same fields

I have an array which contains following values.

array(
'dates' => array(
    (int) 0 => '2013-04-22',
    (int) 1 => '2013-04-23',
),
'publisherName' => array(
    (int) 0 => 'Comp1',
    (int) 1 => 'Comp2',
),
'loaded' => array(
    (int) 0 => (int) 2189,
    (int) 1 => (int) 37,
),
'clicks' => array(
    (int) 0 => (int) 0,
    (int) 1 => (int) 0,
),
'ctr' => array(
    (int) 0 => (int) 0,
    (int) 1 => (int) 0,
)
)

What I want to produce is getting company based data on different dates like the array below.

How am I able to create an array which is like;

array (
    '2013-04-22'=>array(
        'publisherName'=>'Comp1',
        'loaded'=>2189,
        'clicks'=>0,
        'ctr'=>0),
    '2013-04-23'=>array(
        'publisherName'=>'Comp2',
        'loaded'=>37,
        'clicks'=>0,
        'ctr'=>0)
    ...
)

Which contains daily stats but which comes from publishername field.

Any ideas?

Upvotes: 0

Views: 72

Answers (5)

guruwinder
guruwinder

Reputation: 64

$new_arr = your array;
$finalArray = array();
foreach($new_arr['dates'] as $key => $value){
    $finalArray[$value] = array(
        'publisherName'=>$new_arr['publisherName'][$key],
        'loaded'=>$new_arr['loaded'][$key],
        'clicks'=>$new_arr['clicks'][$key],
        'ctr'=>$new_arr['ctr'][$key]
    );
}

Output :

Array
(
[2013-04-22] => Array
    (
    [publisherName] => Comp1
    [loaded] => 2189
    [clicks] => 0
    [ctr] => 0
)

[2013-04-23] => Array
    (
    [publisherName] => Comp2
    [loaded] => 37
    [clicks] => 0
    [ctr] => 0
)

)

Upvotes: 0

billyonecan
billyonecan

Reputation: 20260

Here's an example that doesn't rely on any keys, the only requirement is that date is the first array in your original array:

// $array is your original array
$dates = array_shift($array);

$output = array();
foreach ($array as $k => $a) {
  foreach ($a as $i => $v) {
    $output[$i][$k] = $v;
  }
} 
$output = array_combine($dates, $output);

Upvotes: 1

Kailash Yadav
Kailash Yadav

Reputation: 1930

$newArr = array();
foreach($data['dates'] as $key=>$value) {
    $new[$value] = array('name'=>$data['publisherName'][$key],'loaded'=>$data['loaded'][$key],'clicks'=>$data['clicks'][$key],'ctr'=>$data['ctr'][$key]);
}
echo '<pre>';
print_r($newArr);

Upvotes: 0

Manish Jangir
Manish Jangir

Reputation: 505

<?php 
$data = $yourarray;
$new = array();
foreach($data['dates'] as $key=>$value) {
    $new[$value] = array('name'=>$data['publisherName'][$key],'loaded'=>$data['loaded'][$key],'clicks'=>$data['clicks'][$key],'ctr'=>$data['ctr'][$key]);
}
echo '<pre>';
print_r($new);
?>

Upvotes: 0

Seer
Seer

Reputation: 739

Let the initial array be $a and the desired array $b; Code:

$b = array();
$count = 0;
foreach($a['dates'] as $date) {
    $b[$date] = array(
        'name' => $a['publisherName'][$count],
        'loaded'=> $a['loaded'][$count],
        'clicks'=> $a['clicks'][$count],
        'ctr'=> $a['ctr'][$count]
    );
    $count++;
}

Result:

Array
(
    [2013-04-22] => Array
        (
            [name] => Comp1
            [loaded] => 2189
            [clicks] => 0
            [ctr] => 0
        )

    [2013-04-23] => Array
        (
            [name] => Comp2
            [loaded] => 37
            [clicks] => 0
            [ctr] => 0
        )

)

Upvotes: 1

Related Questions