#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