Почему этот массив php не возвращает ошибку?

<?php

$letters = array( 'A', 'B', 'C' );
$numbers = array( 1, 2, 3 );
$matrix = array( 'Letter' => $letters, 'Number' => $numbers );

echo "<p>Start : {$matrix['Letter'][0]}</p>";

foreach($matrix as $array => $list)
{
echo'<ul>';
foreach($list as $key => $value)
{
echo "<li>$array [$key] = $value";
}
echo '</ul>';
}

?>

Мне нужна помощь в понимании этого кода, по сути, я запутался, как работает строка № 13.

What I see:

'$value' = non-key values of '$list'
'$list' = non-key values of '$matrix'
'$matrix' = $letters, $numbers

Therefore '$value' = $letters, $numbers

'$array' = key values of '$list'

Therefore '$array' = 'Letter', 'Number'

Я знаю, что могу напечатать echo "<p>Letter: {$letters[0]}</p>"; чтобы получить букву «А», но если я наберу echo "<p>Letter: {$letters}</p>"; тогда я получу ошибку.

Я сосредоточен на строке 13, { echo "<li>$array [$key] = $value"; }

Почему это не возвращает ошибку?

Нет места в '$array' был указан, '$key' никогда не был назначен, и нет места в '$value' указан.

Я только начал изучать PHP & MySQL несколько дней назад.
Любая помощь очень ценится, так как я пытаюсь учиться и хочу перейти к следующей части этой книги, но мне нужно сначала обдумать это.

~ Спасибо!

1

Решение

foreach($matrix as $array => $list)
{
//$array is String "Letter" and $list is array $letters for first iteration
//$array is String "Number" and $list is array $numbers for second iteration

echo'<ul>';
foreach($list as $key => $value)
{
//when $list=$letters
//1st iteration:$key =0 and value 'A'; 2nd iteration :$key=1 and $value= 'B'.....

//finally
//$array means "Letter"//$key mean 0
//$value  mean "A"
//and loop goes onecho "<li>$array [$key] = $value";
//result
//<li>Letter[0] = A;
//<li>Letter[1] = B;
//.............
}
echo '</ul>';
}

Надеюсь, вы понимаете.
Помните, что ваш тег li не закрыт. Используйте это

echo "<li>$array [$key] = $value </li>";
1

Другие решения

Все три из этих переменных — те, которые были временно определены для тела цикла foreach построить, и каждая из них является числами или строками, а не массивами.

http://php.net/manual/en/control-structures.foreach.php

foreach($matrix as $array => $list)

Приведенная выше строка определяет переменные $array а также $list для тела этой петли; $array это строка, которая установлена ​​для каждого из ключей $matrix в очереди; $list это соответствующее значение для каждого ключа.

foreach($list as $key => $value)

Точно так же это определяет переменные $key а также $value в теле петли; $key устанавливается для каждого ключа $list по одному, и $value устанавливается для каждого соответствующего значения.

1

Все эти три переменные являются скалярными значениями (либо строками, либо числами), поэтому нет необходимости печатать их напрямую.

foreach($matrix as $array => $list)

Посмотри как foreach работает. Здесь не по имени $array будет иметь одно из двух значений: либо "Letter" или же "Number", Очевидно, что они оба могут быть напечатаны без проблем.

foreach($list as $key => $value)

Вот $list либо будет array( 'A', 'B', 'C' ) или же ( 1, 2, 3 ), В любом случае, $key будет иметь одно из значений 0, 1 или же 2 а также $value будет либо строка, либо целое число. Опять же, все это может быть напечатано без проблем.

1

Прежде всего это

echo "<p>Letter: {$letters}</p>";

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

Этот код

foreach($list as $key => $value)
{ echo "<li>$array [$key] = $value"; }
echo '</ul>';
}

допустимо, потому что каждое значение имеет свой собственный ключ. Если вы не определили ключ для какого-либо значения, ключ будет добавлен автоматически.
Вы сказали, что знаете, что это работает:

echo "<p>Letter: {$letters[0]}</p>";

«0» — это ключ, и он был добавлен автоматически во время инициализации массива. Ключ не должен быть строкой, чтобы быть ключом для некоторого значения.

1

Я упустил тот факт, что если значение ключа не было установлено для '$letters' а также '$numbers'их ключом для каждого значения является их порядок по умолчанию.

Проходя через каждый цикл, я понял, что $list[0] = $letters а также $list[1] = $numbers

Therefore:
'$value' = non key value of '$list[0]' = non-key value of '$letters'
'$key' = key value of '$list[0]' = key value of '$letters'

Так что в некотором смысле, '$list' это указатель на '$letters' а также '$numbers' соответственно.

Если кто-нибудь в будущем запутается, я разработал каждую итерацию ниже:

/*

Loop One:
Sub1:
$list[0] = $letters = 'A', 'B', 'C'
$key = '0'
$value = 'A'

Sub2:
$list[0] = $letters = 'A', 'B', 'C'
$key = '1'
$value = 'B'

Sub3:
$list[0] = $letters = 'A', 'B', 'C'
$key = '2'
$value = 'C'

Loop Two:
Sub1:
$list[1] = $numbers = '1', '2', '3'
$key = '0'
$value = '1'

Sub2:
$list[1] = $numbers = '1', '2', '3'
$key = '1'
$value = '2'

Sub3:
$list[1] = $numbers = '1', '2', '3'
$key = '2'
$value = '3'

*/
0
По вопросам рекламы [email protected]