helpers_array.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. <?php
  2. use \KarmaFW\App;
  3. use \PhpOffice\PhpSpreadsheet\IOFactory as PhpSpreadsheetIOFactory;
  4. if (! function_exists('arrayReduceToOneColumn')) {
  5. function arrayReduceToOneColumn($array, $column_key) {
  6. return array_map(function($row) use ($column_key) {
  7. if (is_callable($column_key)) {
  8. return $column_key($row);
  9. } else {
  10. return $row[$column_key];
  11. }
  12. }, $array);
  13. }
  14. }
  15. if (! function_exists('arrayAddKeyFromColumn')) {
  16. function arrayAddKeyFromColumn($array, $column_key) {
  17. $results = array();
  18. foreach ($array as $row) {
  19. if (is_callable($column_key)) {
  20. $key = $column_key($row);
  21. } else if (is_array($column_key)) {
  22. $key_parts = [];
  23. foreach ($column_key as $column_key_item) {
  24. $key_parts[] = $row[$column_key_item];
  25. }
  26. $key = implode('-', $key_parts);
  27. }else{
  28. $key = $row[$column_key];
  29. }
  30. $results[$key] = $row;
  31. }
  32. if (empty($results)) {
  33. //return new stdClass();
  34. }
  35. return $results;
  36. }
  37. }
  38. if (! function_exists('arrayGroupByColumn')) {
  39. function arrayGroupByColumn($array, $column_key, $preserve_keys=true) {
  40. $results = array();
  41. foreach ($array as $k => $v) {
  42. if (is_callable($column_key)) {
  43. $key_value = $column_key($v);
  44. } else {
  45. $key_value = $v[$column_key];
  46. }
  47. if (! isset($results[$key_value])) {
  48. $results[$key_value] = array();
  49. }
  50. if ($preserve_keys) {
  51. $results[$key_value][$k] = $v;
  52. } else {
  53. $results[$key_value][] = $v;
  54. }
  55. }
  56. return $results;
  57. }
  58. }
  59. if (! function_exists('arrayToList')) {
  60. function arrayToList($array) {
  61. $results = array();
  62. $db = App::getDb();
  63. foreach ($array as $k => $v) {
  64. $results[] = $db->escape($v);
  65. }
  66. return implode(', ', $results);
  67. }
  68. }
  69. if (! function_exists('import_xls')) {
  70. function import_xls($filepath, $fields=[], $encode_utf8=false) {
  71. $spreadsheet = PhpSpreadsheetIOFactory::load($filepath);
  72. $sheetData = $spreadsheet->getActiveSheet()->toArray();
  73. //pre($sheetData, 1);
  74. $headers = [];
  75. if (! empty($fields)) {
  76. $headers = $fields;
  77. }
  78. $rows = [];
  79. $line_idx = 0;
  80. foreach ($sheetData as $input_row) {
  81. $line_idx++;
  82. if ($line_idx <= 1) {
  83. // ligne d'entete
  84. if (empty($headers)) {
  85. foreach ($input_row as $key => $value) {
  86. if ($encode_utf8) {
  87. $headers[$key] = utf8_encode($value);
  88. } else {
  89. $headers[$key] = $value;
  90. }
  91. }
  92. }
  93. continue;
  94. }else{
  95. // lignes de data
  96. $row = [];
  97. $row_ok = true;
  98. $col_idx = 0;
  99. foreach ($input_row as $key => $value) {
  100. $col_idx++;
  101. if ($col_idx > count($headers)) {
  102. continue;
  103. }
  104. if (! isset($headers[$key])) {
  105. $row_ok = false;
  106. //pre($input_row);
  107. break;
  108. }
  109. $header_key = $headers[$key];
  110. if ($encode_utf8) {
  111. $row[$header_key] = utf8_encode($value);
  112. } else {
  113. $row[$header_key] = $value;
  114. }
  115. }
  116. if ($row_ok) {
  117. $rows[] = $row;
  118. }
  119. }
  120. }
  121. return $rows;
  122. }
  123. }
  124. if (! function_exists('import_csv')) {
  125. function import_csv($filepath, $separator=";", $fields=[], $encode_utf8=true) {
  126. $rows = [];
  127. $handle = fopen($filepath, "r");
  128. $headers = [];
  129. if (! empty($fields)) {
  130. $headers = $fields;
  131. }
  132. $line_idx = 0;
  133. while (($input_row = fgetcsv($handle, 4096, $separator)) !== false) {
  134. $line_idx++;
  135. if ($line_idx <= 1) {
  136. // ligne d'entete
  137. if (empty($headers)) {
  138. foreach ($input_row as $key => $value) {
  139. if ($encode_utf8) {
  140. $headers[$key] = utf8_encode($value);
  141. } else {
  142. $headers[$key] = $value;
  143. }
  144. }
  145. }
  146. continue;
  147. }else{
  148. // lignes de data
  149. $row = [];
  150. foreach ($input_row as $key => $value) {
  151. $header_key = $headers[$key];
  152. if ($encode_utf8) {
  153. $row[$header_key] = utf8_encode($value);
  154. } else {
  155. $row[$header_key] = $value;
  156. }
  157. }
  158. $rows[] = $row;
  159. }
  160. }
  161. fclose($handle);
  162. return $rows;
  163. }
  164. }
  165. if (! function_exists('get_csv')) {
  166. function get_csv($arr, $fields=array(), $sep=";") {
  167. $str = '';
  168. if (! empty($arr)) {
  169. if (empty($fields)) {
  170. $fields = array_keys($arr[0]);
  171. }
  172. $line = array();
  173. foreach ($fields as $k => $v) {
  174. if (! is_numeric($k)) {
  175. $line[] = $k;
  176. } else {
  177. $line[] = $v;
  178. }
  179. }
  180. $str .= implode($sep, $line) . PHP_EOL;
  181. foreach ($arr as $row) {
  182. $line = array();
  183. foreach ($fields as $field) {
  184. $val = $row[$field];
  185. if (is_numeric($val) && substr($val."", 0, 1) === "0" && strlen($val."") > 1) {
  186. // pour exporter correctement dans Excel les numeros de telephone commencant par 0
  187. $val = '="' . $val . '"';
  188. }
  189. $line[] = $val;
  190. }
  191. //$str .= implode($sep, $line) . PHP_EOL;
  192. //$str .= '"' . implode('"' . $sep . '"', str_replace('"', '\\"', $line)) . '"' . PHP_EOL;
  193. $str .= '"' . implode('"' . $sep . '"', str_replace('"', '""', $line)) . '"' . PHP_EOL;
  194. }
  195. }
  196. return $str;
  197. }
  198. }
  199. if (! function_exists('exportToCsvFile')) {
  200. function exportToCsvFile($rows, $export_filename=null, $fields=null) {
  201. $csv_content = get_csv($rows, $fields);
  202. if (! empty($export_filename)) {
  203. // download file
  204. header('Content-Type: text/csv');
  205. header('Content-Disposition: attachment;filename=' . basename($export_filename));
  206. header("Pragma: no-cache");
  207. header("Expires: 0");
  208. } else {
  209. // show in browser
  210. header('Content-Type: text/plain');
  211. }
  212. echo $csv_content;
  213. exit;
  214. }
  215. }
  216. if (! function_exists('array_map_with_keys')) {
  217. function array_map_with_keys($func, $array) {
  218. $ret = [];
  219. foreach ($array as $k => $v) {
  220. $ret[$k] = $func($v, $k);
  221. }
  222. return $ret;
  223. }
  224. }