Просмотр файла news/libraries/matrix.php

Размер файла: 2.33Kb
  1. <?php
  2.  
  3. /*
  4. Copyright (c) 2009-2014 F3::Factory/Bong Cosca, All rights reserved.
  5.  
  6. This file is part of the Fat-Free Framework (http://fatfree.sf.net).
  7.  
  8. THE SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF
  9. ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  10. IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
  11. PURPOSE.
  12.  
  13. Please see the license.txt file for more information.
  14. */
  15.  
  16. //! Generic array utilities
  17. class Matrix extends Prefab {
  18.  
  19. /**
  20. * Retrieve values from a specified column of a multi-dimensional
  21. * array variable
  22. * @return array
  23. * @param $var array
  24. * @param $col mixed
  25. **/
  26. function pick(array $var,$col) {
  27. return array_map(
  28. function($row) use($col) {
  29. return $row[$col];
  30. },
  31. $var
  32. );
  33. }
  34.  
  35. /**
  36. * Rotate a two-dimensional array variable
  37. * @return NULL
  38. * @param $var array
  39. **/
  40. function transpose(array &$var) {
  41. $out=array();
  42. foreach ($var as $keyx=>$cols)
  43. foreach ($cols as $keyy=>$valy)
  44. $out[$keyy][$keyx]=$valy;
  45. $var=$out;
  46. }
  47.  
  48. /**
  49. * Sort a multi-dimensional array variable on a specified column
  50. * @return bool
  51. * @param $var array
  52. * @param $col mixed
  53. * @param $order int
  54. **/
  55. function sort(array &$var,$col,$order=SORT_ASC) {
  56. uasort(
  57. $var,
  58. function($val1,$val2) use($col,$order) {
  59. list($v1,$v2)=array($val1[$col],$val2[$col]);
  60. $out=is_numeric($v1) && is_numeric($v2)?
  61. Base::instance()->sign($v1-$v2):strcmp($v1,$v2);
  62. if ($order==SORT_DESC)
  63. $out=-$out;
  64. return $out;
  65. }
  66. );
  67. $var=array_values($var);
  68. }
  69.  
  70. /**
  71. * Change the key of a two-dimensional array element
  72. * @return NULL
  73. * @param $var array
  74. * @param $old string
  75. * @param $new string
  76. **/
  77. function changekey(array &$var,$old,$new) {
  78. $keys=array_keys($var);
  79. $vals=array_values($var);
  80. $keys[array_search($old,$keys)]=$new;
  81. $var=array_combine($keys,$vals);
  82. }
  83.  
  84. /**
  85. * Return month calendar of specified date, with optional setting for
  86. * first day of week (0 for Sunday)
  87. * @return array
  88. * @param $date string
  89. * @param $first int
  90. **/
  91. function calendar($date='now',$first=0) {
  92. $parts=getdate(strtotime($date));
  93. $days=cal_days_in_month(CAL_GREGORIAN,$parts['mon'],$parts['year']);
  94. $ref=date('w',strtotime(date('Y-m',$parts[0]).'-01'))+(7-$first)%7;
  95. $out=array();
  96. for ($i=0;$i<$days;$i++)
  97. $out[floor(($ref+$i)/7)][($ref+$i)%7]=$i+1;
  98. return $out;
  99. }
  100.  
  101. }