0

I'm solving a programming problem from projecteuler and I've created a 2 dimensional array using the data provided which looks like this:

$data_array = array(
array(08, 02, 22, 97, 38, 15, 00, 40, 00, 75, 04, 05, 07, 78, 52, 12, 50, 77, 91, 08),
array(49, 49, 99, 40, 17, 81, 18, 57, 60, 87, 17, 40, 98, 43, 69, 48, 04, 56, 62, 00),
array(81, 49, 31, 73, 55, 79, 14, 29, 93, 71, 40, 67, 53, 88, 30, 03, 49, 13, 36, 65),
array(52, 70, 95, 23, 04, 60, 11, 42, 69, 24, 68, 56, 01, 32, 56, 71, 37, 02, 36, 91),
array(22, 31, 16, 71, 51, 67, 63, 89, 41, 92, 36, 54, 22, 40, 40, 28, 66, 33, 13, 80),
array(24, 47, 32, 60, 99, 03, 45, 02, 44, 75, 33, 53, 78, 36, 84, 20, 35, 17, 12, 50),
array(32, 98, 81, 28, 64, 23, 67, 10, 26, 38, 40, 67, 59, 54, 70, 66, 18, 38, 64, 70),
array(67, 26, 20, 68, 02, 62, 12, 20, 95, 63, 94, 39, 63, 08, 40, 91, 66, 49, 94, 21),
array(24, 55, 58, 05, 66, 73, 99, 26, 97, 17, 78, 78, 96, 83, 14, 88, 34, 89, 63, 72),
array(21, 36, 23, 09, 75, 00, 76, 44, 20, 45, 35, 14, 00, 61, 33, 97, 34, 31, 33, 95),
array(78, 17, 53, 28, 22, 75, 31, 67, 15, 94, 03, 80, 04, 62, 16, 14, 09, 53, 56, 92),
array(16, 39, 05, 42, 96, 35, 31, 47, 55, 58, 88, 24, 00, 17, 54, 24, 36, 29, 85, 57),
array(86, 56, 00, 48, 35, 71, 89, 07, 05, 44, 44, 37, 44, 60, 21, 58, 51, 54, 17, 58),
array(19, 80, 81, 68, 05, 94, 47, 69, 28, 73, 92, 13, 86, 52, 17, 77, 04, 89, 55, 40),
array(04, 52, 08, 83, 97, 35, 99, 16, 07, 97, 57, 32, 16, 26, 26, 79, 33, 27, 98, 66),
array(88, 36, 68, 87, 57, 62, 20, 72, 03, 46, 33, 67, 46, 55, 12, 32, 63, 93, 53, 69),
array(04, 42, 16, 73, 38, 25, 39, 11, 24, 94, 72, 18, 08, 46, 29, 32, 40, 62, 76, 36),
array(20, 69, 36, 41, 72, 30, 23, 88, 34, 62, 99, 69, 82, 67, 59, 85, 74, 04, 36, 16),
array(20, 73, 35, 29, 78, 31, 90, 01, 74, 31, 49, 71, 48, 86, 81, 16, 23, 57, 05, 54),
array(01, 70, 54, 71, 83, 51, 54, 69, 16, 92, 33, 48, 61, 43, 52, 01, 89, 19, 67, 48),
);

everything in the program works well but only this part whcih makes the program crash, I have ini_set('display_errors', 1); and error_reporting(E_ALL ^ E_NOTICE); set but no errors are shown, it's just a blank page. If I comment out the block I've written above then the rest of the program will be executed but when I un-comment it again it crashes.

<?php
ini_set('display_errors', 1);
error_reporting(E_ALL ^ E_NOTICE);
$data_array = array(
    array(08, 02, 22, 97, 38, 15, 00, 40, 00, 75, 04, 05, 07, 78, 52, 12, 50, 77, 91, 08),
    array(49, 49, 99, 40, 17, 81, 18, 57, 60, 87, 17, 40, 98, 43, 69, 48, 04, 56, 62, 00),
    array(81, 49, 31, 73, 55, 79, 14, 29, 93, 71, 40, 67, 53, 88, 30, 03, 49, 13, 36, 65),
    array(52, 70, 95, 23, 04, 60, 11, 42, 69, 24, 68, 56, 01, 32, 56, 71, 37, 02, 36, 91),
    array(22, 31, 16, 71, 51, 67, 63, 89, 41, 92, 36, 54, 22, 40, 40, 28, 66, 33, 13, 80),
    array(24, 47, 32, 60, 99, 03, 45, 02, 44, 75, 33, 53, 78, 36, 84, 20, 35, 17, 12, 50),
    array(32, 98, 81, 28, 64, 23, 67, 10, 26, 38, 40, 67, 59, 54, 70, 66, 18, 38, 64, 70),
    array(67, 26, 20, 68, 02, 62, 12, 20, 95, 63, 94, 39, 63, 08, 40, 91, 66, 49, 94, 21),
    array(24, 55, 58, 05, 66, 73, 99, 26, 97, 17, 78, 78, 96, 83, 14, 88, 34, 89, 63, 72),
    array(21, 36, 23, 09, 75, 00, 76, 44, 20, 45, 35, 14, 00, 61, 33, 97, 34, 31, 33, 95),
    array(78, 17, 53, 28, 22, 75, 31, 67, 15, 94, 03, 80, 04, 62, 16, 14, 09, 53, 56, 92),
    array(16, 39, 05, 42, 96, 35, 31, 47, 55, 58, 88, 24, 00, 17, 54, 24, 36, 29, 85, 57),
    array(86, 56, 00, 48, 35, 71, 89, 07, 05, 44, 44, 37, 44, 60, 21, 58, 51, 54, 17, 58),
    array(19, 80, 81, 68, 05, 94, 47, 69, 28, 73, 92, 13, 86, 52, 17, 77, 04, 89, 55, 40),
    array(04, 52, 08, 83, 97, 35, 99, 16, 07, 97, 57, 32, 16, 26, 26, 79, 33, 27, 98, 66),
    array(88, 36, 68, 87, 57, 62, 20, 72, 03, 46, 33, 67, 46, 55, 12, 32, 63, 93, 53, 69),
    array(04, 42, 16, 73, 38, 25, 39, 11, 24, 94, 72, 18, 08, 46, 29, 32, 40, 62, 76, 36),
    array(20, 69, 36, 41, 72, 30, 23, 88, 34, 62, 99, 69, 82, 67, 59, 85, 74, 04, 36, 16),
    array(20, 73, 35, 29, 78, 31, 90, 01, 74, 31, 49, 71, 48, 86, 81, 16, 23, 57, 05, 54),
    array(01, 70, 54, 71, 83, 51, 54, 69, 16, 92, 33, 48, 61, 43, 52, 01, 89, 19, 67, 48),
);
echo ("test1: works");
$biggest = 1788696;
    function check_horizontal_four()
    {
        global $biggest, $data_array;
        for ($row=0; $row < 20; $row++) { 
            for ($column=0; $column <= 16; $column++) {
                $buffer =  $data_array[$row][$column] * $data_array[$row][$column + 1] * $data_array[$row][$column + 2]
                * $data_array[$row][$column + 3];
                if ( $buffer > $biggest) {
                $biggest = $buffer;
                echo ($buffer);
                }
            }
        }
    }
    function check_vertical_four()
    {
        global $biggest, $data_array;
        for ($column=0; $column < 20; $column++) { 
            for ($row=0; $row <= 16; $row++) { 
                $buffer =  $data_array[$row][$column] * $data_array[$row + 1][$column] * $data_array[$row + 2][$column]
                * $data_array[$row + 3][$column];
                if ( $buffer > $biggest) {
                $biggest = $buffer;
                echo ($buffer);
                }
            }
        }
    }
    function check_diagonal_four()
    {
        global $biggest, $data_array;
        for ($row=0; $row <= 16; $row++) { 
            for ($column=0; $column <= 16; $column++) { 
                $buffer =  $data_array[$row][$column] * $data_array[$row + 1][$column + 1] * $data_array[$row + 2][$column + 2]
                * $data_array[$row + 3][$column + 3];
                if ( $buffer > $biggest) {
                $biggest = $buffer;
                echo ($buffer);
                }
            }
        }
    }
check_vertical_four();
echo "<br/>";
check_horizontal_four();
echo "<br/>";
check_diagonal_four();
echo $buffer;
?>

<?php echo "test 2: works" ?>

edit: I'm using php7.4 and as KIKO Software mentioned numbers starting with a 0 are acted as octal (which I didn't know), there are some 09s and 08s in the array which causes the crash and fixing them solved the issue

Amirreza
  • 153
  • 9
  • 2
    See: [Parse error: Invalid numeric literal](https://stackoverflow.com/questions/40735963/parse-error-invalid-numeric-literal) if you're using PHP 7 or higher. For me it works in PHP 5, see: https://3v4l.org/hnkDL#v5.6.40 – KIKO Software Dec 17 '22 at 18:36
  • Share an online fiddle link for this. – nice_dev Dec 17 '22 at 18:36
  • @KIKOSoftware that link solved my issue, I edited my post, thanks – Amirreza Dec 17 '22 at 20:38
  • You're welcome. Note that I did get an error message, whereas you say you didn't. Perhaps that's also something to look into? – KIKO Software Dec 17 '22 at 20:45
  • @KIKOSoftware $buffer is not defined in that scope and the error in PHP 5.6 is actually right, the error is shown in 3v4l.org too when switched to PHP 7.4, but my local server doesn't output anything, do you have any suggestions? – Amirreza Dec 17 '22 at 21:12
  • 1
    I changed `error_reporting(E_ALL ^ E_NOTICE);` to `error_reporting(E_ALL * E_NOTICE);` and that's solved too! – Amirreza Dec 17 '22 at 21:14
  • 1
    That's pure luck, `error_reporting(E_ALL * E_NOTICE);` is not a valid error reporting value. Simply try: `error_reporting(E_ALL);`. See also: [Error reporting constants](https://www.php.net/manual/en/errorfunc.constants.php). You cannot do more than report all errors. – KIKO Software Dec 17 '22 at 21:25

0 Answers0