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,
 | 
						|
    ],
 | 
						|
];
 |