проблема с переменными для каждой привязки

#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)

http://php.net/manual/en/function.extract.php