Итак, я создаю для своего работодателя что-то для того, чтобы они могли вводить продукты, у них есть очень конкретные требования. У меня есть форма с динамически генерируемыми полями, такими как … (очевидно, не точный код, который следует, но примеры идентичны концептуально)
<input type="text" name="attribute[20]"> inputted value = height <input type="text" name="attribute[27]"> inputted value = width
числа генерируются на основе вещей в базе данных, поэтому 20 будет коррелировать с «шириной» 27, например, будет коррелировать с «высотой».
Поэтому, как только пользователь вводит значения, мне нужны эти значения для входа в базу данных … или в тесте, эхо.
foreach ($_POST['attribute'] as $attributes){ echo key($attributes).' '.$attributes.'<br>'; }
Так что вывести …
20 значение высоты
27 значение ширины
но вместо этого он выводит
значение высоты
значение ширины
Что происходит? У меня что-то похожее … но немного другое, поскольку определенные числа могут иметь более одного входа … который отлично работает.
<input type="text" name="option[][20]"> inputted value = option 1 <input type="text" name="option[][20]"> inputted value = option 2 <input type="text" name="option[][27]"> inputted value = option 1 foreach ($_POST['option'] as $options){ echo key($options).' '; foreach ($options as $option){ echo $option.'<br>'; }
который отлично выводит …
20 вариант 1
20 вариант 2
27 вариант 1
Я не понимаю, почему более сложный человек работает, а более простой – нет, пропал ли я что-то очевидное? Я знаю, что у меня есть несколько неортодоксальный метод кодирования по сравнению с некоторыми, но это то, что он lol. Любая помощь будет принята с благодарностью.
EDIT: сброс вара по запросу
array (22) {["pID"] => string (12) "test product" ["pPrice"] => string (0) "" ["pName"] => string (0) "" ["pRRP" ] => string (0) "" ["pPostSize"] => string (0) "" ["pOurPrice"] => string (0) "" ["pEstDelivery"] => string (0) "" [" pWeight "] => string (0)" "[" pEAN "] => string (0)" "[" pOrder "] => string (0)" "[" pStock "] => string (0)" " ["pufacturer"] => string (0) "" ["pType"] => string (13) "Душевые клапаны" ["pRange"] => string (0) "" ["cat"] => array ( 2) {[0] => string (2) "72" [1] => string (2) "23"} ["attribute"] => array (2) {[ 0 ] => string (5) " width [1] => string (6) "height"} ["option"] => array (3) {[0] => array (1) {[ 11 ] => string (6) " works1 "} [1] => array (1) {[ 10 ] => string (6) " works1 "} [2] => array (1) {[ 10 ] => string (6) " works2 "}} ["pLongdescription "] => string (0)" "[" meta_description "] => string (0)" "[" meta_keyword "] => string (0)" "[" meta_title "] => string (0)" "[ "action"] => string (6) "create"}
полужирным шрифтом, являются части, которые успешно выходят в моем втором примере. но жирным курсивом, как вы можете видеть, возвращает 0 вместо 20, который фактически находится в значении имени формы.
<input type="text" name="attribute[20]"> inputted value = height <input type="text" name="attribute[27]"> inputted value = width foreach ($_POST['attribute'] as $attributes){ echo key($attributes).' '.$attributes.'<br>'; }
Обратите внимание, что вы зацикливаете массив атрибутов в столбце. $ attributes – значение для каждого поля (и, следовательно, не является массивом.
Вместо использования key()
попробуйте:
foreach ($_POST['attribute'] as $attributeKey => $attributes){ echo $attributeKey.' '.$attributes.'<br>'; }
Согласно документации PHP key () :
Функция key () просто возвращает ключ элемента массива, на который в данный момент указывается внутренний указатель. Он не перемещает указатель. Если внутренний указатель указывает на конец списка элементов или массив пуст, key () возвращает NULL .
Документация (и пример) показывает, что вам необходимо предоставить фактический массив в качестве параметра, в котором вы используете значение.
Поэтому используйте что-то вроде этого:
$yourArray = $_POST['attribute']; foreach ($yourArray as $attributes){ echo key($yourArray).' '.$attributes.'<br>'; }
Несмотря на то, что вы заметили, что знаете, что у вас есть «несколько неортодоксальный метод кодирования по сравнению с некоторыми», было бы гораздо лучше использовать foreach
-loop таким образом:
foreach ($_POST['attribute'] as $attributeKey => $attributes){ echo $attributeKey.' '.$attributes.'<br>'; }
поскольку метод key()
кажется мне «изворотливым» (зависит от внутренних указателей).
Ознакомьтесь с документацией foreach для получения дополнительной информации об этом использовании.
Итак, я исправил это, с помощью вас, ребята, и осознание того, что я был немного глупым и редактировал только статическую часть формы, чтобы включить динамический ключ, а не сгенерированную часть ajax, которая перезаписывает его.
foreach ($_POST['attribute'] as $key => $attributes){ echo $key.'+'.$attributes.'<br>'; }
Работает отлично. Спасибо за советы ребята.