#php #foreach
#php #foreach
Вопрос:
У меня есть следующее содержимое массива:
Array ( [achternaam] => Jansen [roepnaam] => Theo )
Теперь я хочу использовать этот код
foreach ($values as $r) {
$achternaam = $r['achternaam'];
$roepnaam = $r['roepnaam'];
}
Когда требуется повторить $ achternaam и $ voornaam, значения пусты.
Кто-нибудь знает, как привязать эти переменные друг к другу.
Результатом должно быть $ achternaam = Jansen и $ roepnaam = Theo.
Спасибо за помощь!
Комментарии:
1. Foreach не предоставляет так называемые «ассоциативные массивы». Таким образом, вы могли бы сделать $ achternaam = $ r[0].
2. Разве Тео Янсен не тот же самый, кто разработал несколько прекрасных механизмов перемещения, используя генетические алгоритмы? Круто!
Ответ №1:
$values = array(
'achternaam' => 'Jansen',
'roepnaam' => 'Theo'
);
Элементами $values
являются строки, а не массивы. Чтобы получить доступ к значениям achternaam
и roepnaam
, вам необходимо удалить foreach:
$achternaam = $values['achternaam'];
$roepnaam = $values['roepnaam'];
Если позиции ключей achternaam
и roepnaam
не меняются, вы также можете использовать list
:
list($achternaam, $roepnaam) = $values;
Это только возможно, если ключи расположены в нужном порядке achternaam
, roepnaam
. Т.е. $values['achternaam']
должны быть назначены раньше $values['roepnaam']
.
Комментарии:
1. Можете ли вы использовать список в для каждого цикла?
2. @DownDown: нет проблем, возможно, вы захотите прочитать nl2.php.net/manual/en/language.types.array.php тоже
Ответ №2:
это должно сработать:
$values = array('achternaam' => 'Jansen', 'roepnaam' => 'Theo');
list($achternaam, $roepnaam) = $values;
все же попробуйте…
Ответ №3:
Используйте вложенный массив, если вы хотите, чтобы в нем работало более одного пользователя:
<?php
$values = array(
array(
'achternaam' => 'Jansen',
'voornaam' => 'Theo',
'club' => 'Ajax'
)
);
foreach ($values as $r) {
$achternaam = $r['achternaam'];
$roepnaam = $r['roepnaam'];
echo $roepnaam . ' ' . $achternaam;
}
Однако, если вы хотите продолжать использовать этот массив, вы можете сделать это без foreach:
<?php
$values = array(
'achternaam' => 'Jansen',
'voornaam' => 'Theo',
'club' => 'Ajax'
);
$achternaam = $values['achternaam'];
$roepnaam = $values['roepnaam'];
echo $roepnaam . ' ' . $achternaam;
Ответ №4:
Похоже, вы неправильно понимаете, как foreach
работает. Для каждой итерации цикла ваша переменная $r
имеет строковое значение — «Jansen» в первый раз и «Theo» во второй.
Результат, которого вы пытаетесь достичь, может быть выполнен следующим образом:
foreach($values as $k => $r) {
$$k = $r;
}
Будьте осторожны с тем, откуда берутся ключи вашего массива, поскольку этот код может перезаписать другие чувствительные переменные в вашем скрипте.
Комментарии:
1. Эта конструкция также может быть выполнена с
extract($values)
.
Ответ №5:
Как насчет одной простой строки кода: extract($values)