arr.php 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <?php namespace Laravel;
  2. use Closure;
  3. class Arr {
  4. /**
  5. * Get an item from an array.
  6. *
  7. * @param array $array
  8. * @param string $key
  9. * @param mixed $default
  10. * @return mixed
  11. */
  12. public static function get($array, $key, $default = null)
  13. {
  14. if (is_null($key)) return $array;
  15. foreach (explode('.', $key) as $segment)
  16. {
  17. if ( ! is_array($array) or ! array_key_exists($segment, $array))
  18. {
  19. return ($default instanceof Closure) ? call_user_func($default) : $default;
  20. }
  21. $array = $array[$segment];
  22. }
  23. return $array;
  24. }
  25. /**
  26. * Set an array item to a given value.
  27. *
  28. * The same "dot" syntax used by the "get" method may be used here.
  29. *
  30. * @param array $array
  31. * @param string $key
  32. * @param mixed $value
  33. * @return void
  34. */
  35. public static function set(&$array, $key, $value)
  36. {
  37. if (is_null($key)) return $array = $value;
  38. $keys = explode('.', $key);
  39. while (count($keys) > 1)
  40. {
  41. $key = array_shift($keys);
  42. if ( ! isset($array[$key]) or ! is_array($array[$key]))
  43. {
  44. $array[$key] = array();
  45. }
  46. $array =& $array[$key];
  47. }
  48. $array[array_shift($keys)] = $value;
  49. }
  50. /**
  51. * Return the first element in an array which passes a given truth test.
  52. *
  53. * @param array $array
  54. * @param Closure $callback
  55. * @return mixed
  56. */
  57. public static function first($array, $callback, $default = null)
  58. {
  59. foreach ($array as $key => $value)
  60. {
  61. if (call_user_func($callback, $key, $value)) return $value;
  62. }
  63. return ($default instanceof Closure) ? call_user_func($default) : $default;
  64. }
  65. /**
  66. * Remove all array values that are contained within a given array of values.
  67. *
  68. * @param array $array
  69. * @param array $without
  70. * @return array
  71. */
  72. public static function without($array, $without = array())
  73. {
  74. foreach ($array as $key => $value)
  75. {
  76. if (in_array($value, $without)) unset($array[$key]);
  77. }
  78. return $array;
  79. }
  80. }