<?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 несколько дней назад.
Любая помощь очень ценится, так как я пытаюсь учиться и хочу перейти к следующей части этой книги, но мне нужно сначала обдумать это.
~ Спасибо!
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>";
Все три из этих переменных — те, которые были временно определены для тела цикла 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
устанавливается для каждого соответствующего значения.
Все эти три переменные являются скалярными значениями (либо строками, либо числами), поэтому нет необходимости печатать их напрямую.
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
будет либо строка, либо целое число. Опять же, все это может быть напечатано без проблем.
Прежде всего это
echo "<p>Letter: {$letters}</p>";
возвращает ошибку, потому что вы пытались отобразить весь массив. Это не может быть сделано с эхом.
Этот код
foreach($list as $key => $value)
{ echo "<li>$array [$key] = $value"; }
echo '</ul>';
}
допустимо, потому что каждое значение имеет свой собственный ключ. Если вы не определили ключ для какого-либо значения, ключ будет добавлен автоматически.
Вы сказали, что знаете, что это работает:
echo "<p>Letter: {$letters[0]}</p>";
«0» — это ключ, и он был добавлен автоматически во время инициализации массива. Ключ не должен быть строкой, чтобы быть ключом для некоторого значения.
Я упустил тот факт, что если значение ключа не было установлено для '$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'
*/