| 
									
										
										
										
											2017-04-01 03:36:02 +00:00
										 |  |  | <?php | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | return [ | 
					
						
							|  |  |  |     // Third argument = 0
 | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         1, // Expected
 | 
					
						
							|  |  |  |         2, // Input
 | 
					
						
							|  |  |  |         [2, 3, 4, 3], | 
					
						
							|  |  |  |         0, | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         '#N/A', // Expected
 | 
					
						
							|  |  |  |         2, // Input
 | 
					
						
							|  |  |  |         [1, 0, 4, 3], | 
					
						
							|  |  |  |         0, | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         1, // Expected
 | 
					
						
							|  |  |  |         2, // Input
 | 
					
						
							|  |  |  |         [2, 0, 0, 3], | 
					
						
							|  |  |  |         0, | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         2, // Expected
 | 
					
						
							|  |  |  |         0, // Input
 | 
					
						
							|  |  |  |         [2, 0, 0, 3], | 
					
						
							|  |  |  |         0, | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Third argument = 1
 | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         1, // Expected
 | 
					
						
							|  |  |  |         2, // Input
 | 
					
						
							|  |  |  |         [2, 3, 4, 3], | 
					
						
							|  |  |  |         1, | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         2, // Expected
 | 
					
						
							|  |  |  |         2, // Input
 | 
					
						
							|  |  |  |         [2, 0, 4, 3], | 
					
						
							|  |  |  |         1, | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         3, // Expected
 | 
					
						
							|  |  |  |         2, // Input
 | 
					
						
							|  |  |  |         [2, 0, 0, 3], | 
					
						
							|  |  |  |         1, | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         4, // Expected
 | 
					
						
							|  |  |  |         4, // Input
 | 
					
						
							|  |  |  |         [2, 0, 0, 3], | 
					
						
							|  |  |  |         1, | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Third argument = -1
 | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         1, // Expected
 | 
					
						
							|  |  |  |         2, // Input
 | 
					
						
							|  |  |  |         [2, 0, 0, 3], | 
					
						
							|  |  |  |         -1, | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         4, // Expected
 | 
					
						
							|  |  |  |         2, // Input
 | 
					
						
							|  |  |  |         [3, 3, 4, 5], | 
					
						
							|  |  |  |         -1, | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         1, // Expected
 | 
					
						
							|  |  |  |         5, // Input
 | 
					
						
							|  |  |  |         [8, 4, 3, 2], | 
					
						
							|  |  |  |         -1, | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         '#N/A', // Expected
 | 
					
						
							|  |  |  |         6, // Input
 | 
					
						
							|  |  |  |         [3, 5, 6, 8], | 
					
						
							|  |  |  |         -1, | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         1, // Expected
 | 
					
						
							|  |  |  |         6, // Input
 | 
					
						
							|  |  |  |         [8, 5, 4, 2], | 
					
						
							|  |  |  |         -1, | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         3, // Expected
 | 
					
						
							|  |  |  |         4, // Input
 | 
					
						
							|  |  |  |         [5, 8, 4, 2], | 
					
						
							|  |  |  |         -1, | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         2, // Expected
 | 
					
						
							|  |  |  |         4, // Input
 | 
					
						
							|  |  |  |         [8, 8, 3, 2], | 
					
						
							|  |  |  |         -1, | 
					
						
							|  |  |  |     ], | 
					
						
							| 
									
										
										
										
											2019-03-06 21:37:06 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
											
												Fix exact MATCH on ranges with empty cells (#1520)
Fixes a bug when doing exact match on ranges with empty cells.
```php
<?php
require 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
// Row: 1, null, 4, null, 8.
$sheet->getCell('A1')->setValue(1);
$sheet->getCell('A3')->setValue(4);
$sheet->getCell('A5')->setValue(8);
$sheet->getCell('B1')->setValue('=MATCH(4, A1:A5, 1)');
// Should echo 3, but echos '#N/A'.
echo $sheet->getCell('B1')->getCalculatedValue() . PHP_EOL;
// Row: 1, null, 4, null, null.
$sheet->getCell('C1')->setValue(1);
$sheet->getCell('C3')->setValue(4);
$sheet->getCell('D1')->setValue('=MATCH(5, C1:C5, 1)');
// Should echo 3, but echos '#N/A'.
echo $sheet->getCell('D1')->getCalculatedValue() . PHP_EOL;
```
											
										 
											2020-06-19 18:51:46 +00:00
										 |  |  |     // match on ranges with empty cells
 | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         3, // Expected
 | 
					
						
							|  |  |  |         4, // Input
 | 
					
						
							|  |  |  |         [1, null, 4, null, 8], | 
					
						
							|  |  |  |         1, | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         3, // Expected
 | 
					
						
							|  |  |  |         5, // Input
 | 
					
						
							|  |  |  |         [1, null, 4, null, null], | 
					
						
							|  |  |  |         1, | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-06 21:37:06 +00:00
										 |  |  |     // 0s are causing errors, because things like 0 == 'x' is true. Thanks PHP!
 | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         3, | 
					
						
							|  |  |  |         'x', | 
					
						
							|  |  |  |         [[0], [0], ['x'], ['x'], ['x']], | 
					
						
							| 
									
										
										
										
											2019-09-20 23:04:36 +00:00
										 |  |  |         0, | 
					
						
							| 
									
										
										
										
											2019-03-06 21:37:06 +00:00
										 |  |  |     ], | 
					
						
							| 
									
										
										
										
											2019-08-12 03:11:36 +00:00
										 |  |  |     [ | 
					
						
							|  |  |  |         2, | 
					
						
							|  |  |  |         'a', | 
					
						
							| 
									
										
										
										
											2019-09-20 23:04:36 +00:00
										 |  |  |         [false, 'a', 1], | 
					
						
							|  |  |  |         -1, | 
					
						
							| 
									
										
										
										
											2019-08-12 03:11:36 +00:00
										 |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         '#N/A', // Expected
 | 
					
						
							|  |  |  |         0, | 
					
						
							|  |  |  |         ['x', true, false], | 
					
						
							| 
									
										
										
										
											2019-09-20 23:04:36 +00:00
										 |  |  |         -1, | 
					
						
							| 
									
										
										
										
											2019-08-12 03:11:36 +00:00
										 |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         '#N/A', // Expected
 | 
					
						
							|  |  |  |         true, | 
					
						
							|  |  |  |         ['a', 'b', 'c'], | 
					
						
							| 
									
										
										
										
											2019-09-20 23:04:36 +00:00
										 |  |  |         -1, | 
					
						
							| 
									
										
										
										
											2019-08-12 03:11:36 +00:00
										 |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         '#N/A', // Expected
 | 
					
						
							|  |  |  |         true, | 
					
						
							| 
									
										
										
										
											2019-09-20 23:04:36 +00:00
										 |  |  |         [0, 1, 2], | 
					
						
							|  |  |  |         -1, | 
					
						
							| 
									
										
										
										
											2019-08-12 03:11:36 +00:00
										 |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         '#N/A', // Expected
 | 
					
						
							|  |  |  |         true, | 
					
						
							| 
									
										
										
										
											2019-09-20 23:04:36 +00:00
										 |  |  |         [0, 1, 2], | 
					
						
							|  |  |  |         0, | 
					
						
							| 
									
										
										
										
											2019-08-12 03:11:36 +00:00
										 |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         '#N/A', // Expected
 | 
					
						
							|  |  |  |         true, | 
					
						
							| 
									
										
										
										
											2019-09-20 23:04:36 +00:00
										 |  |  |         [0, 1, 2], | 
					
						
							|  |  |  |         1, | 
					
						
							| 
									
										
										
										
											2019-08-12 03:11:36 +00:00
										 |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         1, // Expected
 | 
					
						
							|  |  |  |         true, | 
					
						
							| 
									
										
										
										
											2019-09-20 23:04:36 +00:00
										 |  |  |         [true, true, true], | 
					
						
							|  |  |  |         -1, | 
					
						
							| 
									
										
										
										
											2019-08-12 03:11:36 +00:00
										 |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         1, // Expected
 | 
					
						
							|  |  |  |         true, | 
					
						
							| 
									
										
										
										
											2019-09-20 23:04:36 +00:00
										 |  |  |         [true, true, true], | 
					
						
							|  |  |  |         0, | 
					
						
							| 
									
										
										
										
											2019-08-12 03:11:36 +00:00
										 |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         3, // Expected
 | 
					
						
							|  |  |  |         true, | 
					
						
							| 
									
										
										
										
											2019-09-20 23:04:36 +00:00
										 |  |  |         [true, true, true], | 
					
						
							|  |  |  |         1, | 
					
						
							| 
									
										
										
										
											2019-08-12 03:11:36 +00:00
										 |  |  |     ], | 
					
						
							|  |  |  |     // lookup stops when value < searched one
 | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         5, // Expected
 | 
					
						
							|  |  |  |         6, | 
					
						
							|  |  |  |         [true, false, 'a', 'z', 222222, 2, 99999999], | 
					
						
							| 
									
										
										
										
											2019-09-20 23:04:36 +00:00
										 |  |  |         -1, | 
					
						
							| 
									
										
										
										
											2019-08-12 03:11:36 +00:00
										 |  |  |     ], | 
					
						
							| 
									
										
											  
											
												Fix MATCH when comparing different numeric types (#1521)
Let MATCH compare numerics of different type (e.g. integers and floats).
```php
<?php
require 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
// Row: 1, 2, 3, 4, 5. MATCH for 4.6.
$sheet->getCell('A1')->setValue(1);
$sheet->getCell('A2')->setValue(2);
$sheet->getCell('A3')->setValue(3);
$sheet->getCell('A4')->setValue(4);
$sheet->getCell('A5')->setValue(5);
$sheet->getCell('B1')->setValue('=MATCH(4.6, A1:A5, 1)');
// Should echo 4, but echos '#N/A'.
echo $sheet->getCell('B1')->getCalculatedValue() . PHP_EOL;
// Row: 1, 2, 3, 3.8, 5. MATCH for 4.
$sheet->getCell('C1')->setValue(1);
$sheet->getCell('C2')->setValue(2);
$sheet->getCell('C3')->setValue(3);
$sheet->getCell('C4')->setValue(3.8);
$sheet->getCell('C5')->setValue(5);
$sheet->getCell('D1')->setValue('=MATCH(4, C1:C5, 1)');
// Should echo 4, but echos 3.
echo $sheet->getCell('D1')->getCalculatedValue() . PHP_EOL;
```
Co-authored-by: Mark Baker <mark@lange.demon.co.uk>
											
										 
											2020-06-19 18:54:04 +00:00
										 |  |  |     // when mixing numeric types
 | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         4, // Expected
 | 
					
						
							|  |  |  |         4.6, | 
					
						
							|  |  |  |         [1, 2, 3, 4, 5], | 
					
						
							|  |  |  |         1, | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         4, // Expected
 | 
					
						
							|  |  |  |         4, | 
					
						
							|  |  |  |         [1, 2, 3, 3.8, 5], | 
					
						
							|  |  |  |         1, | 
					
						
							|  |  |  |     ], | 
					
						
							| 
									
										
										
										
											2019-08-12 03:11:36 +00:00
										 |  |  |     // if element of same data type met and it is < than searched one #N/A - no further processing
 | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         '#N/A', // Expected
 | 
					
						
							|  |  |  |         6, | 
					
						
							| 
									
										
										
										
											2019-09-20 23:04:36 +00:00
										 |  |  |         [true, false, 'a', 'z', 2, 888], | 
					
						
							|  |  |  |         -1, | 
					
						
							| 
									
										
										
										
											2019-08-12 03:11:36 +00:00
										 |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         '#N/A', // Expected
 | 
					
						
							|  |  |  |         6, | 
					
						
							|  |  |  |         ['6'], | 
					
						
							| 
									
										
										
										
											2019-09-20 23:04:36 +00:00
										 |  |  |         -1, | 
					
						
							| 
									
										
										
										
											2019-08-12 03:11:36 +00:00
										 |  |  |     ], | 
					
						
							|  |  |  |     // expression match
 | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         2, // Expected
 | 
					
						
							|  |  |  |         'a?b', | 
					
						
							|  |  |  |         ['a', 'abb', 'axc'], | 
					
						
							| 
									
										
										
										
											2019-09-20 23:04:36 +00:00
										 |  |  |         0, | 
					
						
							| 
									
										
										
										
											2019-08-12 03:11:36 +00:00
										 |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         1, // Expected
 | 
					
						
							|  |  |  |         'a*', | 
					
						
							|  |  |  |         ['aAAAAAAA', 'as', 'az'], | 
					
						
							| 
									
										
										
										
											2019-09-20 23:04:36 +00:00
										 |  |  |         0, | 
					
						
							| 
									
										
										
										
											2019-08-12 03:11:36 +00:00
										 |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         3, // Expected
 | 
					
						
							|  |  |  |         '1*11*1', | 
					
						
							|  |  |  |         ['abc', 'efh', '1a11b1'], | 
					
						
							| 
									
										
										
										
											2019-09-20 23:04:36 +00:00
										 |  |  |         0, | 
					
						
							| 
									
										
										
										
											2019-08-12 03:11:36 +00:00
										 |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         3, // Expected
 | 
					
						
							|  |  |  |         '1*11*1', | 
					
						
							|  |  |  |         ['abc', 'efh', '1a11b1'], | 
					
						
							| 
									
										
										
										
											2019-09-20 23:04:36 +00:00
										 |  |  |         0, | 
					
						
							| 
									
										
										
										
											2019-08-12 03:11:36 +00:00
										 |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         2, // Expected
 | 
					
						
							|  |  |  |         'a*~*c', | 
					
						
							|  |  |  |         ['aAAAAA', 'a123456*c', 'az'], | 
					
						
							| 
									
										
										
										
											2019-09-20 23:04:36 +00:00
										 |  |  |         0, | 
					
						
							| 
									
										
										
										
											2019-08-12 03:11:36 +00:00
										 |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         3, // Expected
 | 
					
						
							|  |  |  |         'a*123*b', | 
					
						
							|  |  |  |         ['aAAAAA', 'a123456*c', 'a99999123b'], | 
					
						
							| 
									
										
										
										
											2019-09-20 23:04:36 +00:00
										 |  |  |         0, | 
					
						
							| 
									
										
										
										
											2019-08-12 03:11:36 +00:00
										 |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         1, // Expected
 | 
					
						
							|  |  |  |         '*', | 
					
						
							|  |  |  |         ['aAAAAA', 'a111123456*c', 'qq'], | 
					
						
							| 
									
										
										
										
											2019-09-20 23:04:36 +00:00
										 |  |  |         0, | 
					
						
							| 
									
										
										
										
											2019-08-12 03:11:36 +00:00
										 |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         2, // Expected
 | 
					
						
							|  |  |  |         '?', | 
					
						
							|  |  |  |         ['aAAAAA', 'a', 'a99999123b'], | 
					
						
							| 
									
										
										
										
											2019-09-20 23:04:36 +00:00
										 |  |  |         0, | 
					
						
							| 
									
										
										
										
											2019-08-12 03:11:36 +00:00
										 |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         '#N/A', // Expected
 | 
					
						
							|  |  |  |         '?', | 
					
						
							| 
									
										
										
										
											2019-09-20 23:04:36 +00:00
										 |  |  |         [1, 22, 333], | 
					
						
							|  |  |  |         0, | 
					
						
							| 
									
										
										
										
											2019-08-12 03:11:36 +00:00
										 |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         3, // Expected
 | 
					
						
							|  |  |  |         '???', | 
					
						
							| 
									
										
										
										
											2019-09-20 23:04:36 +00:00
										 |  |  |         [1, 22, 'aaa'], | 
					
						
							|  |  |  |         0, | 
					
						
							| 
									
										
										
										
											2019-08-12 03:11:36 +00:00
										 |  |  |     ], | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         3, // Expected
 | 
					
						
							|  |  |  |         '*', | 
					
						
							| 
									
										
										
										
											2019-09-20 23:04:36 +00:00
										 |  |  |         [1, 22, 'aaa'], | 
					
						
							|  |  |  |         0, | 
					
						
							| 
									
										
										
										
											2019-03-06 21:37:06 +00:00
										 |  |  |     ], | 
					
						
							| 
									
										
										
										
											2017-04-01 03:36:02 +00:00
										 |  |  | ]; |