 1a44ef9109
			
		
	
	
		1a44ef9109
		
			
		
	
	
	
	
		
			
			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>
		
	
			
		
			
				
	
	
		
			276 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			276 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?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,
 | |
|     ],
 | |
| 
 | |
|     // 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,
 | |
|     ],
 | |
| 
 | |
|     // 0s are causing errors, because things like 0 == 'x' is true. Thanks PHP!
 | |
|     [
 | |
|         3,
 | |
|         'x',
 | |
|         [[0], [0], ['x'], ['x'], ['x']],
 | |
|         0,
 | |
|     ],
 | |
|     [
 | |
|         2,
 | |
|         'a',
 | |
|         [false, 'a', 1],
 | |
|         -1,
 | |
|     ],
 | |
|     [
 | |
|         '#N/A', // Expected
 | |
|         0,
 | |
|         ['x', true, false],
 | |
|         -1,
 | |
|     ],
 | |
|     [
 | |
|         '#N/A', // Expected
 | |
|         true,
 | |
|         ['a', 'b', 'c'],
 | |
|         -1,
 | |
|     ],
 | |
|     [
 | |
|         '#N/A', // Expected
 | |
|         true,
 | |
|         [0, 1, 2],
 | |
|         -1,
 | |
|     ],
 | |
|     [
 | |
|         '#N/A', // Expected
 | |
|         true,
 | |
|         [0, 1, 2],
 | |
|         0,
 | |
|     ],
 | |
|     [
 | |
|         '#N/A', // Expected
 | |
|         true,
 | |
|         [0, 1, 2],
 | |
|         1,
 | |
|     ],
 | |
|     [
 | |
|         1, // Expected
 | |
|         true,
 | |
|         [true, true, true],
 | |
|         -1,
 | |
|     ],
 | |
|     [
 | |
|         1, // Expected
 | |
|         true,
 | |
|         [true, true, true],
 | |
|         0,
 | |
|     ],
 | |
|     [
 | |
|         3, // Expected
 | |
|         true,
 | |
|         [true, true, true],
 | |
|         1,
 | |
|     ],
 | |
|     // lookup stops when value < searched one
 | |
|     [
 | |
|         5, // Expected
 | |
|         6,
 | |
|         [true, false, 'a', 'z', 222222, 2, 99999999],
 | |
|         -1,
 | |
|     ],
 | |
|     // when mixing numeric types
 | |
|     [
 | |
|         4, // Expected
 | |
|         4.6,
 | |
|         [1, 2, 3, 4, 5],
 | |
|         1,
 | |
|     ],
 | |
|     [
 | |
|         4, // Expected
 | |
|         4,
 | |
|         [1, 2, 3, 3.8, 5],
 | |
|         1,
 | |
|     ],
 | |
|     // if element of same data type met and it is < than searched one #N/A - no further processing
 | |
|     [
 | |
|         '#N/A', // Expected
 | |
|         6,
 | |
|         [true, false, 'a', 'z', 2, 888],
 | |
|         -1,
 | |
|     ],
 | |
|     [
 | |
|         '#N/A', // Expected
 | |
|         6,
 | |
|         ['6'],
 | |
|         -1,
 | |
|     ],
 | |
|     // expression match
 | |
|     [
 | |
|         2, // Expected
 | |
|         'a?b',
 | |
|         ['a', 'abb', 'axc'],
 | |
|         0,
 | |
|     ],
 | |
|     [
 | |
|         1, // Expected
 | |
|         'a*',
 | |
|         ['aAAAAAAA', 'as', 'az'],
 | |
|         0,
 | |
|     ],
 | |
|     [
 | |
|         3, // Expected
 | |
|         '1*11*1',
 | |
|         ['abc', 'efh', '1a11b1'],
 | |
|         0,
 | |
|     ],
 | |
|     [
 | |
|         3, // Expected
 | |
|         '1*11*1',
 | |
|         ['abc', 'efh', '1a11b1'],
 | |
|         0,
 | |
|     ],
 | |
|     [
 | |
|         2, // Expected
 | |
|         'a*~*c',
 | |
|         ['aAAAAA', 'a123456*c', 'az'],
 | |
|         0,
 | |
|     ],
 | |
|     [
 | |
|         3, // Expected
 | |
|         'a*123*b',
 | |
|         ['aAAAAA', 'a123456*c', 'a99999123b'],
 | |
|         0,
 | |
|     ],
 | |
|     [
 | |
|         1, // Expected
 | |
|         '*',
 | |
|         ['aAAAAA', 'a111123456*c', 'qq'],
 | |
|         0,
 | |
|     ],
 | |
|     [
 | |
|         2, // Expected
 | |
|         '?',
 | |
|         ['aAAAAA', 'a', 'a99999123b'],
 | |
|         0,
 | |
|     ],
 | |
|     [
 | |
|         '#N/A', // Expected
 | |
|         '?',
 | |
|         [1, 22, 333],
 | |
|         0,
 | |
|     ],
 | |
|     [
 | |
|         3, // Expected
 | |
|         '???',
 | |
|         [1, 22, 'aaa'],
 | |
|         0,
 | |
|     ],
 | |
|     [
 | |
|         3, // Expected
 | |
|         '*',
 | |
|         [1, 22, 'aaa'],
 | |
|         0,
 | |
|     ],
 | |
| ];
 |