2011-12-27 2 views
0

У меня в массив $ _POST все данные, которые мне нужны.Php foreach array (затем с разделяемым индексом)

Если я print_r массив, я вижу что-то вроде этого:

Array (
    [0_45_115] => 01 
    [0_46_115] => 01 
    [0_47_115] => 01 
    [0_48_115] => 01 
    [0_49_115] => 01 
    [0_50_115] => 01 
    [0_51_115] => 01 
    [0_52_115] => 01 
    [0_53_115] => 01 
    [0_54_115] => 01 
    [0_55_115] => 01 
    [0_56_115] => 01 
    [0_57_115] => 01 
    [0_58_115] => 01 
    [0_59_115] => 01 
    [0_60_115] => 01 
    [0_61_115] => 01 
    [0_62_115] => 01 
    [0_63_115] => 01 
    [0_64_115] => 01 
    [0_65_115] => 01 
    [0_66_115] => 01 
    [0_67_115] => 01 
) 

Индекс я постить вид (name attr) не имеет подчеркивания. Например:

<input type="text" name="0 45 115" value="" /> 

Давайте забудем об этом.

0_45_115, который указатель предоставит мне все необходимые данные, которые я хочу обновить или вставить новую строку в мою базу данных. Значение увидит мне информацию, которую я хочу.

Проблема в том, что я не знаю, как управлять массивом. Может быть, я должен использовать метод foreach, и я буду использовать функцию split, чтобы разбить индекс каждой строки. Затем я сделаю все остальное для вставки/обновления моей базы данных.

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

ответ

1

Пространства преобразуются в подчеркивания в соответствии со спецификациями PHP. См. this page для более подробной информации. В частности, найдите эту строку на странице: Точки и пробелы в именах переменных преобразуются в символы подчеркивания.

Я думаю, что правильный подход будет

foreach($_POST as $key => $value) 
{ 
    $parts = explode('_', $key); //split your $key 
    //then deal with corresponding $value 
} 
1

См. Функцию array_keys().
Он будет возвращать все ключи входного массива, чем вы можете использовать функцию split() для работы с ключами и получения необходимых данных.

Например:

$keys = array_keys($yourArray); 
foreach($keys as $k) { 
    $data = split("_", $k); 
    print $data[0]; 
    print $data[1]; 
    print $data[2]; 

} 
+0

похоже, что я ищу .. У вас есть объяснение подчёркиваний mr gualano? –

+0

Я отредактировал свой ответ с небольшим примером функции split(). –

1
foreach($yourArray as $k => $v) { 

    $keys = explode("_", $k) // for first iterate you will get array('0','45','115') 

} 
+0

ваше решение лучше .. Я должен изучить объектно-ориентированные php и PDO, но не бесплатное время к несчастью .. :( Thx для ответа –

0

В качестве альтернативы петли, вы можете использовать array_map:

array_map(function ($str) {return explode('_', $str);}, 
      array_keys($_POST)); 

Результат:

array (
    array (
    0 => '0', 
    1 => '45', 
    2 => '115', 
), 
    array (
    0 => '0', 
    1 => '46', 
    2 => '115', 
), 
    array (
    0 => '0', 
    1 => '47', 
    2 => '115', 
), 
    ... 

Поскольку только PHP 5.3, а новые - анонимные функции на уровне языка, цикл - лучший выбор, если вам нужно поддерживать более ранние версии PHP. В противном случае вы должны использовать create_function, что просто уродливо.

Смежные вопросы