-1

I have following array

[0] => Array (
    [subscriptionId] => 32
    [subscribedTo] => 20
    [subscriptionDate] => 2017-11-11 11:01:20
    [videoTime] => 2017-11-11 10:54:44
    )
[1] => Array (
    [subscriptionId] => 30
    [subscribedTo] => 2
    [subscriptionDate] => 2017-11-11 10:27:32        
    [videoTime] => 2017-11-10 21:43:03       
    )
[2] => Array (
    [subscriptionId] => 30
    [subscribedTo] => 2
    [subscriptionDate] => 2017-11-11 10:27:32      
    [videoTime] => 2017-11-10 21:38:36        
    )
[3] => Array (
    [subscriptionId] => 31
    [subscribedTo] => 7
    [subscriptionDate] => 2017-11-11 10:28:29        
    [videoTime] => 2017-10-26 12:41:23       
    )
[4] => Array (
    [subscriptionId] => 31
    [subscribedTo] => 7
    [subscriptionDate] => 2017-11-11 10:28:29       
    [videoTime] => 2017-10-26 12:29:02
          )
[5] => Array (
    [subscriptionId] => 31
    [subscribedTo] => 7
    [subscriptionDate] => 2017-11-11 10:28:29       
    [videoTime] => 2017-10-26 12:23:26
    )
[6] => Array (
    [subscriptionId] => 30
    [subscribedTo] => 2
    [subscriptionDate] => 2017-11-11 10:27:32        
    [videoTime] => 2017-10-09 09:23:59       
    )
[7] => Array (
    [subscriptionId] => 30
    [subscribedTo] => 2
    [subscriptionDate] => 2017-11-11 10:27:32       
    [videoTime] => 2017-10-09 09:23:35        
    )

I want to group the rows based on subscribedTo such that the sequence does not change. I found a solution here but it results in following sequence based on subscribedId: 2,2,2,2,7,7,7,20

What I am trying to get is: 20,2,2,2,2,7,7,7

Community
  • 1
  • 1
sheldon cooper
  • 455
  • 2
  • 8
  • 22

1 Answers1

0

Try this, first group equal indices and then merging

$arr = [];// this should be your array
$temp = [];

foreach ($arr as $a) {
    if (!isset($temp[$a[subscribedTo]])) {
        $temp[$a[subscribedTo]] = [];
    }

    $temp[$a[subscribedTo]][] = $a;
}

$arr = []; //reset the array
foreach ($temp as $t) {
    array_merge($arr, $t);
}
Claudio
  • 5,078
  • 1
  • 22
  • 33