MATCH.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361
  1. <?php
  2. return [
  3. // Third argument = 0
  4. [
  5. 1, // Expected
  6. 2, // Input
  7. [2, 3, 4, 3],
  8. 0,
  9. ],
  10. [
  11. '#N/A', // Expected
  12. 2, // Input
  13. [1, 0, 4, 3],
  14. 0,
  15. ],
  16. [
  17. 1, // Expected
  18. 2, // Input
  19. [2, 0, 0, 3],
  20. 0,
  21. ],
  22. [
  23. 2, // Expected
  24. 0, // Input
  25. [2, 0, 0, 3],
  26. 0,
  27. ],
  28. // Third argument = 1
  29. [
  30. 1, // Expected
  31. 2, // Input
  32. [2, 3, 4, 3],
  33. 1,
  34. ],
  35. [
  36. 2, // Expected
  37. 2, // Input
  38. [2, 0, 4, 3],
  39. 1,
  40. ],
  41. [
  42. 3, // Expected
  43. 2, // Input
  44. [2, 0, 0, 3],
  45. 1,
  46. ],
  47. [
  48. 4, // Expected
  49. 4, // Input
  50. [2, 0, 0, 3],
  51. 1,
  52. ],
  53. // Third argument = -1
  54. [
  55. 1, // Expected
  56. 2, // Input
  57. [2, 0, 0, 3],
  58. -1,
  59. ],
  60. [
  61. 4, // Expected
  62. 2, // Input
  63. [3, 3, 4, 5],
  64. -1,
  65. ],
  66. [
  67. 1, // Expected
  68. 5, // Input
  69. [8, 4, 3, 2],
  70. -1,
  71. ],
  72. [
  73. '#N/A', // Expected
  74. 6, // Input
  75. [3, 5, 6, 8],
  76. -1,
  77. ],
  78. [
  79. 1, // Expected
  80. 6, // Input
  81. [8, 5, 4, 2],
  82. -1,
  83. ],
  84. [
  85. 3, // Expected
  86. 4, // Input
  87. [5, 8, 4, 2],
  88. -1,
  89. ],
  90. [
  91. 2, // Expected
  92. 4, // Input
  93. [8, 8, 3, 2],
  94. -1,
  95. ],
  96. [ // Default matchtype
  97. 4, // Expected
  98. 4, // Input
  99. [2, 0, 0, 3],
  100. null,
  101. ],
  102. // match on ranges with empty cells
  103. [
  104. 3, // Expected
  105. 4, // Input
  106. [1, null, 4, null, 8],
  107. 1,
  108. ],
  109. [
  110. 3, // Expected
  111. 5, // Input
  112. [1, null, 4, null, null],
  113. 1,
  114. ],
  115. // 0s are causing errors, because things like 0 == 'x' is true. Thanks PHP!
  116. [
  117. 3,
  118. 'x',
  119. [[0], [0], ['x'], ['x'], ['x']],
  120. 0,
  121. ],
  122. [
  123. 2,
  124. 'a',
  125. [false, 'a', 1],
  126. -1,
  127. ],
  128. [
  129. '#N/A', // Expected
  130. 0,
  131. ['x', true, false],
  132. -1,
  133. ],
  134. [
  135. '#N/A', // Expected
  136. true,
  137. ['a', 'b', 'c'],
  138. -1,
  139. ],
  140. [
  141. '#N/A', // Expected
  142. true,
  143. [0, 1, 2],
  144. -1,
  145. ],
  146. [
  147. '#N/A', // Expected
  148. true,
  149. [0, 1, 2],
  150. 0,
  151. ],
  152. [
  153. '#N/A', // Expected
  154. true,
  155. [0, 1, 2],
  156. 1,
  157. ],
  158. [
  159. 1, // Expected
  160. true,
  161. [true, true, true],
  162. -1,
  163. ],
  164. [
  165. 1, // Expected
  166. true,
  167. [true, true, true],
  168. 0,
  169. ],
  170. [
  171. 3, // Expected
  172. true,
  173. [true, true, true],
  174. 1,
  175. ],
  176. // lookup stops when value < searched one
  177. [
  178. 5, // Expected
  179. 6,
  180. [true, false, 'a', 'z', 222222, 2, 99999999],
  181. -1,
  182. ],
  183. // when mixing numeric types
  184. [
  185. 4, // Expected
  186. 4.6,
  187. [1, 2, 3, 4, 5],
  188. 1,
  189. ],
  190. [
  191. 4, // Expected
  192. 4,
  193. [1, 2, 3, 3.8, 5],
  194. 1,
  195. ],
  196. // if element of same data type met and it is < than searched one #N/A - no further processing
  197. [
  198. '#N/A', // Expected
  199. 6,
  200. [true, false, 'a', 'z', 2, 888],
  201. -1,
  202. ],
  203. [
  204. '#N/A', // Expected
  205. 6,
  206. ['6'],
  207. -1,
  208. ],
  209. // expression match
  210. [
  211. 2, // Expected
  212. 'a?b',
  213. ['a', 'abb', 'axc'],
  214. 0,
  215. ],
  216. [
  217. 1, // Expected
  218. 'a*',
  219. ['aAAAAAAA', 'as', 'az'],
  220. 0,
  221. ],
  222. [
  223. 3, // Expected
  224. '1*11*1',
  225. ['abc', 'efh', '1a11b1'],
  226. 0,
  227. ],
  228. [
  229. 3, // Expected
  230. '1*11*1',
  231. ['abc', 'efh', '1a11b1'],
  232. 0,
  233. ],
  234. [
  235. 2, // Expected
  236. 'a*~*c',
  237. ['aAAAAA', 'a123456*c', 'az', 'alembic'],
  238. 0,
  239. ],
  240. [
  241. 3, // Expected
  242. 'a*123*b',
  243. ['aAAAAA', 'a123456*c', 'a99999123b'],
  244. 0,
  245. ],
  246. [
  247. 1, // Expected
  248. '*',
  249. ['aAAAAA', 'a111123456*c', 'qq'],
  250. 0,
  251. ],
  252. [
  253. 2, // Expected
  254. '?',
  255. ['aAAAAA', 'a', 'a99999123b'],
  256. 0,
  257. ],
  258. [
  259. '#N/A', // Expected
  260. '?',
  261. [1, 22, 333],
  262. 0,
  263. ],
  264. [
  265. 3, // Expected
  266. '???',
  267. [1, 22, 'aaa'],
  268. 0,
  269. ],
  270. [
  271. 3, // Expected
  272. '*',
  273. [1, 22, 'aaa'],
  274. 0,
  275. ],
  276. [
  277. '#N/A', // Expected
  278. 'abc',
  279. [1, 22, 'aaa'],
  280. 0,
  281. ],
  282. [
  283. '#N/A', // Expected (Invalid lookup value)
  284. new DateTime('2021-03-11'),
  285. [1, 22, 'aaa'],
  286. 1,
  287. ],
  288. [
  289. '#N/A', // Expected (Invalid match type)
  290. 'abc',
  291. [1, 22, 'aaa'],
  292. 123,
  293. ],
  294. [
  295. '#N/A', // Expected (Empty lookup array)
  296. 'abc',
  297. [],
  298. 1,
  299. ],
  300. [
  301. 8,
  302. 'A*e',
  303. ['Aardvark', 'Apple', 'Armadillo', 'Acre', 'Absolve', 'Amplitude', 'Adverse', 'Apartment'],
  304. -1,
  305. ],
  306. [
  307. 2,
  308. 'A*e',
  309. ['Aardvark', 'Apple', 'Armadillo', 'Acre', 'Absolve', 'Amplitude', 'Adverse', 'Apartment'],
  310. 0,
  311. ],
  312. [
  313. '#N/A',
  314. 'A*e',
  315. ['Aardvark', 'Apple', 'Armadillo', 'Acre', 'Absolve', 'Amplitude', 'Adverse', 'Apartment'],
  316. 1,
  317. ],
  318. [
  319. 8,
  320. 'A?s*e',
  321. ['Aardvark', 'Apple', 'Armadillo', 'Acre', 'Absolve', 'Amplitude', 'Adverse', 'Apartment'],
  322. -1,
  323. ],
  324. [
  325. 5,
  326. 'A?s*e',
  327. ['Aardvark', 'Apple', 'Armadillo', 'Acre', 'Absolve', 'Amplitude', 'Adverse', 'Apartment'],
  328. 0,
  329. ],
  330. [
  331. '#N/A',
  332. 'A*e',
  333. ['Aardvark', 'Apple', 'Armadillo', 'Acre', 'Absolve', 'Amplitude', 'Adverse', 'Apartment'],
  334. 1,
  335. ],
  336. [
  337. 8,
  338. '*verse',
  339. ['Obtuse', 'Amuse', 'Obverse', 'Inverse', 'Assurance', 'Amplitude', 'Adverse', 'Apartment'],
  340. -1,
  341. ],
  342. [
  343. 3,
  344. '*verse',
  345. ['Obtuse', 'Amuse', 'Obverse', 'Inverse', 'Assurance', 'Amplitude', 'Adverse', 'Apartment'],
  346. 0,
  347. ],
  348. [
  349. 3, // Expected
  350. '*~~*', // contains a tilde
  351. ['aAAAAA', 'a123456*c', 'abc~xyz', 'alembic'],
  352. 0,
  353. ],
  354. [
  355. 2, // Expected
  356. 'abc/123*', // wildcard search contains a forward slash
  357. ['abc123fff', 'abc/123fff'],
  358. 0,
  359. ],
  360. ];