2016-11-25 3 views
0

Следующая массив наступающем от $ _POST для PHP веб-приложения:регулярное выражение для _number

enter image description here

Я пытаюсь придумать способ, чтобы определить, какой из ключей заканчивается подчеркиванием и а число, а затем создать для них отдельный многомерный массив. К сожалению, я застрял на первом шаге, чтобы определить, какая из клавиш заканчивается символом подчеркивания и числом. Вот мой экспериментальный код:

\t \t foreach ($values as $k => $v): 
 
\t \t \t echo $k . '-' . $v . '<br>'; 
 
\t \t \t preg_match_all('!\d+!', $v, $m); 
 
\t \t \t echo '<pre>' . print_r($m, 1) . '</pre>'; 
 
\t \t \t // echo $m[$k]; 
 
\t \t endforeach;

И частичный снимок экрана итоге:

enter image description here

Конечной целью является, чтобы получить что-то вроде этого, как результат:

 

     [scenarioID] => 7 
     [comments] => test 1 
     [scenarioinserted] => 
     Array 
     (
     [0]=>Array 
     (
     [itemID]=>100 
     [itemvalue]=> 
     ), 
     [1]=>Array 
     (
     [itemID]=>120 
     [itemvalue]=> 
     ), 
    etc. 

Как это можно сделать?

EDIT
Здесь была моя попытка установить HTML для name="itemID[]" в коде PHP:

foreach ($o as $key => $value): 
    foreach ($value as $k => $v): 
     if (!in_array($key, $calculation)): 
      if ($k === 'itemID'): 
       //$td[$key][$k] = '<input type="text" name="itemID_' . $i . '" style="width: 3em" readonly="readonly" value=' . $o[$key][$k] . '>'; 
       $td[$key][$k] = '<input type="text" name="itemID[]" style="width: 3em" readonly="readonly" value=' . $o[$key][$k] . '>'; 
      elseif ($k === 'itemvalue'): 
       $class = (!empty($errors[$k])) ? ' class="fail" ' : ''; 
       $td[$key][$k] = '<input type="text" name="itemvalue[]" style="width: 7em"' . $readonly . $class . ' value="' . $o[$key][$k] . '">'; 
      else: 
       $td[$key][$k] = $v; 
      endif; 
     else: 
      $td[$key][$k] = $v; 
     endif; 
    endforeach; 
endforeach; 

И снимок экрана полученного исходного HTML код: enter image description here

ДАЛЬНЕЙШЕГО EDIT
Вышеуказанное возвращает:

enter image description here

Блестящий! Большое спасибо за помощь. Это MUCH лучше, чем мой оригинальный подход.

+2

Вместо именования полей ввода 'itemID_0',' itemID_1' и т.д. назвать поля ввода 'name =" itemID [] "', тогда вы получите массив, возвращаемый в '$ _POST ['itemID'']', и вся работа выполняется для вас. Сделайте то же самое для 'itemValue' – RiggsFolly

+0

@RiggsFolly you genius: -) \ –

+0

@Dagon Нет, вы, гений :) – RiggsFolly

ответ

1

в использовании формы:

name="itemID[]" 

и

name="itemvalue[]" 

Теперь у вас есть хорошие массивы использовать

+0

Я пробовал это, но тег HTML в исходном коде отображается как 'name =" itemID [] "'. Код PHP для этого (в пределах пары циклов foreach) подобен «'; «Видимо, я делаю что-то неправильно. – knot22

+0

im не понимаю, в чем проблема, здесь @ knot22 –

+0

Я отредактирую исходное сообщение и включу некоторые снимки экрана, чтобы попытаться объяснить его лучше. – knot22

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