(PHP) Как ссылаться на элемент в массиве $_POST[] с помощью выражения?

#php #isset

#php #isset

Вопрос:

Я хочу выяснить, установлена ли переменная. Функция isset() PHP (т.Е. isset($myVariable) Обычно предоставляет мне установленный статус переменной. Однако я хочу ссылаться на переменную как на выражение. Возможно ли это? и если да, то как?

Немного больше контекста и деталей: у меня есть несколько кнопок отправки изображений в HTML-форме, каждая с именем ‘DeleteFileButtonNNN’, где NNN — целое число (фактически, идентификационный номер файла). Когда пользователь нажимает, скажем, кнопку, связанную с NNN=2, форма отправляется и $_POST[‘DeleteFileButton2_x’] устанавливается (тогда как $_POST[‘DeleteFileButton1_x’ и $ _POST[‘DeleteFileButton3_x’] не будут установлены). Я хочу иметь возможность перебирать массив $ _POST, чтобы узнать, какая кнопка была нажата.

Я могу легко создать границы самого цикла с помощью цикла while или foreach, потому что все возможные идентификаторы файлов (т. Е. Значения NNN) хранятся в таблице MySQL. Мне нужна помощь в том, как указать различные элементы DeleteFileButtonNNN в качестве индексов элементов массива в массиве $ _POST, поскольку ссылка должна быть выражением (например, конкатенация строк, такая как ‘DeleteFileButton’.$anInteger.’_x’). Тем не менее, я не верю, что PHP позволяет мне ссылаться на массив $ _POST как на $_POST[$someVariable] .

Может кто-нибудь мне помочь, пожалуйста? Заранее благодарю.

Комментарии:

1. Тысяча благодарностей за эти информативные и креативные ответы!

Ответ №1:

Хм … не надо. Вместо этого используйте доступ к массиву:

  <input type="checkbox" name="deleteFileButton[0]" />
 <input type="checkbox" name="deleteFileButton[1]" />
 <input type="checkbox" name="deleteFileButton[2]" />
  

Если первый и третий элементы отмечены выше, то при выполнении итерации $_POST['deleteFileButton'] вы получите значения для 0 и 2, а не для 1.

  foreach( $_POST['deleteFileButton'] as $key => $val )
      print "$key was clicked."
  

Если хотите, вы можете изменить его на ассоциативный массив (например. deleteFileButton[myKey] ), и вы можете установить значение ввода так, чтобы $val имел некоторое значимое значение.


Если вы чувствуете, что <key>_<index> это ваш единственный вариант, вы можете использовать isset или array_key_exists , как предлагали другие постеры, но не будет способа узнать максимальное входное значение заранее, не сохраняя его где-то еще. Честно говоря, это менее эффективно и менее элегантно, чем использование массива.

Ответ №2:

Оставляю свой ответ здесь, поскольку он соответствует вопросу, но ответ @cwallenpoole лучше подходит для проблемы, если не для вопроса.


Вы могли бы использовать array_key_exists($key, $_POST) для $ _POST, если я правильно понял ваш вопрос.

А также вы можете получить доступ к указать другую переменную в качестве ключа к $_POST, если она возвращает правильное значение. например:

 $key = 'DeleteFileButton2_x'
$value = $_POST[$key]
  

Ответ №3:

PHP позволяет вам использовать все, что превращается в целое число или строку, для ссылки на массив, поэтому вы можете определенно сделать:

 function x() {
   return "a";
}

$x = 'a';

$val = $_POST[x()];
$val = $_POST[$x];
$val = $_POST['a'];
$val = $_POST[chr(ord('a'))];
  

Также разрешены «составные» ключи:

 $_POST["someprefixstring_$x"];  // exactly the same as $_POST['someprefixstring_a'];
  

Комментарии:

1. Ответ Марка Б. кратко продемонстрировал мою ошибку, предположив, что PHP не поддерживает нелитеральные ссылки на массив $ _POST (или любой другой). Спасибо за это. Также спасибо другим респондентам, чьи ответы дали мне представление о многих функциях обработки массива, которые будут мне полезны!

Ответ №4:

 <input name="asd[]" value="a">
<input name="asd[]" value="b">
<input name="asd[]" value="c">
<input name="asd[]" value="d">

<?php
foreach($_POST['asd'] as $key => $value)
   echo $_POST['asd'][$key];
?>
  

Ответ №5:

сначала я бы сказал, что php позволяет ссылаться на массив $ _POST как на $_POST[$someVariable] . простой реализацией было бы использовать скрытое поле ввода и с помощью javascript перед отправкой формы заменить значение скрытого поля идентификатором изображения, а на вашей странице php получить этот скрытый ввод в качестве идентификатора изображения, на котором будет выполняться операция. это сэкономит многие конструкции if-else