Как получить доступ к элементу $ _POST через синтаксис следующего типа массива? - PullRequest
1 голос
/ 29 октября 2009

Если я отправлю четыре переменные POST, но вторая & mdash; Я не знаю, будет ли тег name=""; как я могу получить к нему доступ? Могу ли я использовать $_POST[1] или нет?

Ответы [ 8 ]

2 голосов
/ 29 октября 2009

У меня есть удобная функция для этого

function nth($ary, $n) {
     $b = array_slice($ary, intval($n), 1); 
     return count($b) ? reset($b) : null;
}

в вашем случае

$foo = nth($_POST, 1);
2 голосов
/ 29 октября 2009

Вот одно решение с использованием внутренних указателей:

if(count($_POST) > 1){ // just a check here.
  reset($_POST); // reset the pointer regardless of its position
  $second_value = next($_POST); // get the next value, aka 2nd element.
}

Кстати, что касается числового индекса: PHP $ _POST и $ _GET являются ассоциативными массивами! Они не поддерживают что-то вроде $_POST[0] или $_POST[1]. Они вернут NULL, потому что они не установлены. Вместо этого $_POST["name"] будет работать.

Из руководства по PHP: «Ассоциативный массив переменных, переданных в текущий скрипт через метод HTTP POST (или GET)."

1 голос
/ 29 октября 2009
foreach( $_POST as $key => $value ){
    if( is_int($key) ) //do something with $value
}

Это будет работать, если вы знаете, что другие значения $ _POST имеют имена в ваших формах (то есть ключи, которые не являются числами).

0 голосов
/ 29 октября 2009

простой для каждого сделает свое дело, если вы не знаете ключей массива в массиве $ _POST

foreach($_POST as $key=>$value):
   print 'key'.$key.' value'.$value
endforeach; 

Но рекомендуется знать, каковы ваши переменные записи, если вы планируете их обрабатывать.

0 голосов
/ 29 октября 2009

Сделать копию:

$vars = $_POST;

Удалите имена, которые вы знаете:

unset( $vars[ "known variable 1" ] );
unset( $vars[ "known variable 2" ] );

Все, что осталось, это переменные, которые вам нужны: извлеките их с помощью array_values ​​или перечислите их с помощью foreach, что угодно.

0 голосов
/ 29 октября 2009

использование

<?php
print_r($_POST);
?>

это даст вам представление о том, что является ключом области, которую вы не знаете.

0 голосов
/ 29 октября 2009

Вы можете преобразовать его, используя array_values ​​() first.

Пример

<?php

$a = array(
        "first key" => "first value",
        "second key" => "second value",
);

$v = array_values($a);
echo "First value: {$v[0]}\n";

?>

выход

$ php -f a.php
First value: first value

РЕДАКТИРОВАТЬ: Спасибо за комментарии, указывающие на первоначальную ошибку.

0 голосов
/ 29 октября 2009

Вы можете пройти через это:

foreach ($_POST as $k => $v) {
  if (substr($k, 0, 3) == 'id_') { 
    // do stuff
  }
}

Но это действительно зависит от критериев поиска. В приведенном выше примере он вытягивает все переменные POST, которые начинаются с «id_». Возможно, вам удастся сделать это проще, если у вас будут другие / лучшие критерии.

...