fork(1) download
  1. <?php
  2.  
  3. function explodeArray($arr)
  4. {
  5. $newArr = array();
  6. foreach($arr as $row)
  7. {
  8. $key = array_keys($row)[0];
  9. $curArr = count($newArr) > 0 ? $newArr[count($newArr)-1] : array();
  10. if( array_key_exists($key, $curArr) )
  11. {
  12. array_push($newArr, array($key=>$row[$key]) );
  13. }
  14. else
  15. {
  16. $index = count($newArr) > 0 ? count($newArr) - 1 : 0 ;
  17. $newArr[$index][$key] = $row[$key];
  18. }
  19. }
  20. return $newArr;
  21. }
  22.  
  23. $detail = array(
  24. array('id'=>'item1'),
  25. array('price'=>300),
  26. array('quantity'=>1),
  27. array('id'=>'item2'),
  28. array('price'=>400),
  29. array('quantity'=>2)
  30. );
  31.  
  32. var_dump( explodeArray($detail) );
  33.  
  34. $detail_match = array(
  35. array('id'=>'item1'),
  36. array('price'=>300),
  37. array('quantity'=>1),
  38. array('newkey'=>'sample'),
  39. array('id'=>'item2'),
  40. array('price'=>400),
  41. array('quantity'=>2),
  42. array('newkey'=>'sample')
  43. );
  44.  
  45. var_dump( explodeArray($detail_match) ); // Works with any size of keys.
  46.  
  47. $detail_diff_key = array(
  48. array('id'=>'item1'),
  49. array('price'=>300),
  50. array('quantity'=>1),
  51. array('diff1'=>'sample1'),
  52. array('id'=>'item2'),
  53. array('price'=>400),
  54. array('quantity'=>2),
  55. array('diff2'=>'sample2')
  56. );
  57.  
  58. var_dump( explodeArray($detail_diff_key) ); // Works with any size of keys and different keys.
  59.  
  60. $detail_unmatch = array(
  61. array('id'=>'item1'),
  62. array('price'=>300),
  63. array('quantity'=>1),
  64. array('unmatchnum'=>'sample1'),
  65. array('id'=>'item2'),
  66. array('price'=>400),
  67. array('quantity'=>2)
  68. );
  69.  
  70. var_dump( explodeArray($detail_unmatch) );
Success #stdin #stdout 0.04s 52480KB
stdin
Standard input is empty
stdout
array(2) {
  [0]=>
  array(3) {
    ["id"]=>
    string(5) "item1"
    ["price"]=>
    int(300)
    ["quantity"]=>
    int(1)
  }
  [1]=>
  array(3) {
    ["id"]=>
    string(5) "item2"
    ["price"]=>
    int(400)
    ["quantity"]=>
    int(2)
  }
}
array(2) {
  [0]=>
  array(4) {
    ["id"]=>
    string(5) "item1"
    ["price"]=>
    int(300)
    ["quantity"]=>
    int(1)
    ["newkey"]=>
    string(6) "sample"
  }
  [1]=>
  array(4) {
    ["id"]=>
    string(5) "item2"
    ["price"]=>
    int(400)
    ["quantity"]=>
    int(2)
    ["newkey"]=>
    string(6) "sample"
  }
}
array(2) {
  [0]=>
  array(4) {
    ["id"]=>
    string(5) "item1"
    ["price"]=>
    int(300)
    ["quantity"]=>
    int(1)
    ["diff1"]=>
    string(7) "sample1"
  }
  [1]=>
  array(4) {
    ["id"]=>
    string(5) "item2"
    ["price"]=>
    int(400)
    ["quantity"]=>
    int(2)
    ["diff2"]=>
    string(7) "sample2"
  }
}
array(2) {
  [0]=>
  array(4) {
    ["id"]=>
    string(5) "item1"
    ["price"]=>
    int(300)
    ["quantity"]=>
    int(1)
    ["unmatchnum"]=>
    string(7) "sample1"
  }
  [1]=>
  array(3) {
    ["id"]=>
    string(5) "item2"
    ["price"]=>
    int(400)
    ["quantity"]=>
    int(2)
  }
}