У меня есть 6 значений в массиве, но когда я выполняю, отображаются только 4 значения. Почему? - PullRequest
0 голосов
/ 08 марта 2020

У меня есть 6 значений в массиве $arr1, но когда я выполняю код, отображаются только 4 значения, почему? Код находит, что максимальное значение составляет 526, но там, где я использую echo для составления списка всего массива, массив со значением 526 не отображается.

Вот код:

<?php
$arr1[0][ ]=110;
$arr1[0][ ]=20;
$arr1[0][ ]=526;
$arr1[1][ ]=105;
$arr1[1][ ]=56;
$arr1[1][ ]=96;
echo "The given array is : <br>";
for($i=0;$i=count($arr1);$i++)
{
    for($j=0;$j=count($arr1);$j++)
    {
        Echo "\$arr1[$i][$j] =",$arr1[$i][$j],"<br>";
    }
}
$b=0;
foreach($arr1 as $val)
{
    foreach($val as $key=>$val1)
    {
        $b=$val1;
    }
}
Echo "The maximum value in the array is =",$b;
?>

Ответы [ 3 ]

1 голос
/ 08 марта 2020

Есть несколько проблем с вашим примером кода.

Массив $arr1 имеет 2 записи с ключами 0 и 1, поэтому, если вы l oop 2 раза 2 значения, вы получите 4 значения вместо 6.

Затем для каждого ключа есть 3 записи, поэтому для второго l oop необходимо использовать count($arr1[$i]), используя [$i] для подсчета записей для этого ключа.

В циклах вы устанавливаете значение $i на счетчик, вызывая бесконечное l oop $i=count($arr1), в то время как вы должны использовать вместо него знак <.

В Во второй части, находящей наибольшее значение, вы должны сначала проверить, больше ли новое значение, чем текущее значение, иначе у вас всегда будет последнее значение.

$arr1[0][] = 110;
$arr1[0][] = 20;
$arr1[0][] = 526;
$arr1[1][] = 105;
$arr1[1][] = 56;
$arr1[1][] = 96;
echo "The given array is : <br>";
for ($i = 0; $i < count($arr1); $i++) {
    for ($j = 0; $j < count($arr1[$i]); $j++) {
        echo "\$arr1[$i][$j] =", $arr1[$i][$j], "<br>";
    }
}
$b = 0;
foreach ($arr1 as $val) {
    foreach ($val as $key => $val1) {
        if ($val1 > $b)
            $b = $val1;
    }
}
echo "The maximum value in the array is =", $b;

Выход

The given array is :
$arr1[0][0] =110
$arr1[0][1] =20
$arr1[0][2] =526
$arr1[1][0] =105
$arr1[1][1] =56
$arr1[1][2] =96
The maximum value in the array is =526

См. Php демо


Как указывает @ Nick , вы также можете рассчитать максимальное значение для вложенных циклов напрямую:

$b = 0;

echo "The given array is :" . PHP_EOL;
for ($i = 0; $i < count($arr1); $i++) {
    for ($j = 0; $j < count($arr1[$i]); $j++) {
        if ($arr1[$i][$j] > $b) $b = $arr1[$i][$j];
        echo "\$arr1[$i][$j] =", $arr1[$i][$j] . PHP_EOL;
    }
}

Php демо

0 голосов
/ 09 марта 2020

Пожалуйста, используйте этот код. Я надеюсь, что это будет работать для вас.

$arr1[0][ ]=110;
$arr1[0][ ]=20;
$arr1[0][ ]=526;
$arr1[1][ ]=105;
$arr1[1][ ]=56;
$arr1[1][ ]=96;
echo "The given array is : <br>";
for($i=0;$i<count($arr1);$i++)
{
   for($j=0;$j<count($arr1);$j++)
   {
       echo "$arr1[$i][$j] =",$arr1[$i][$j],"<br>";
   }
}
$b=0;
sort($arr1);
foreach($arr1 as $val)
{
    foreach($val as $key=>$val1)
    {
        $b=$val1;
    }
}

echo "The maximum value in the array is =",$b;
0 голосов
/ 08 марта 2020

Вы можете сгладить массив с помощью оператора splat, затем использовать max.

echo max(array_merge(...$arr1));

Если вы хотите, вы можете использовать implode для печати значений

 echo implode(' ',array_merge(...$arr1));

ДЕМО: - https://3v4l.org/0ZamG

...