fork(1) download
  1. <?php
  2.  
  3. $a = array('key1'=>1, 12, 7, 3.14, 'key2'=>8, 5, 'a', 3);
  4. $minKey = $maxKey = key ($a);
  5. $minIndex = $maxIndex = 0;
  6. for ($count=0; ($el = each($a)) !== false; ++$count) {
  7. list($key,$value)=$el;
  8. if ($a[$minKey] > $value) {
  9. $minKey = $key;
  10. $minIndex = $count;
  11. }
  12. if ($a[$maxKey] < $value) {
  13. $maxKey = $key;
  14. $maxIndex = $count;
  15. }
  16. }
  17.  
  18. $count = max(0,abs ($minIndex-$maxIndex)-1);
  19. $minIndex = min($minIndex, $maxIndex)+1;
  20.  
  21. $b = array();
  22. foreach ($a as $key=>$value)
  23. $b[$key] = $value;
  24.  
  25. $a = array();
  26. for ($i=0; $i < $minIndex; ++$i) {
  27. list($key,$value)=each($b);
  28. $a[$key]=$value;
  29. }
  30. for ($c=array(); $i < $minIndex+$count; ++$i) {
  31. list($key,$value)=each($b);
  32. $c[$key]=$value;
  33. }
  34. for (end($c); !is_null($key=key($c)); prev($c)) {
  35. $val = current($c);
  36. $a[$key]=$val;
  37. }
  38. while (($el = each($b)) !== false) {
  39. list($key,$value)=$el;
  40. $a[$key]=$value;
  41. }
  42. var_dump($a);
Success #stdin #stdout 0.01s 20520KB
stdin
Standard input is empty
stdout
array(8) {
  ["key1"]=>
  int(1)
  [0]=>
  int(12)
  [1]=>
  int(7)
  [2]=>
  float(3.14)
  ["key2"]=>
  int(8)
  [3]=>
  int(5)
  [4]=>
  string(1) "a"
  [5]=>
  int(3)
}
array(8) {
  ["key1"]=>
  int(1)
  [0]=>
  int(12)
  [3]=>
  int(5)
  ["key2"]=>
  int(8)
  [2]=>
  float(3.14)
  [1]=>
  int(7)
  [4]=>
  string(1) "a"
  [5]=>
  int(3)
}