類似上面的表單,還沒加js,不一定多少行,我要做的是每行一條資料寫入資料庫。這個數組我就不會組合了
我表單裡是如下設定的:
| 品名: 型號: 規格: 數量: 單價: 總價: |
| 品名: 型號: 規格: 數量: 單價: 總價: |
擷取到的數組是這樣的
array 'pinming' => array 0 => string '123' (length=3) 1 => string '123' (length=3) 'xinghao' => array 0 => string '123' (length=3) 1 => string '123' (length=3) 'guige' => array 0 => string '123' (length=3) 1 => string '123' (length=3) 'shuliang' => array 0 => string '123' (length=3) 1 => string '123' (length=3) 'danjia' => array 0 => string '123' (length=3) 1 => string '123' (length=3) 'zongjia' => array 0 => string '12312' (length=5) 1 => string '123' (length=3)
我怎麼將上面的數組變成下面的樣子
array( //第一條 array( 'pinming' => 'xxx' 'guige' => 'xxx' //....其他欄位 ) //第二條 array( 'pingming' => 'xxx' 'guige' => 'xxx' //其他欄位 ) //第N條 array())
回複討論(解決方案)
不就一個行列交換嗎?
class squareArray{public function swapRowCol($inArr){$mit = new MultipleIterator(MultipleIterator::MIT_KEYS_ASSOC);foreach($inArr as $key => $value) { $temArr = new ArrayIterator($value); $mit->attachIterator($temArr, $key); }$arr = array();foreach($mit as $item) array_push($arr,$item);if (isset($inArr[0])) $arr = array_combine(array_keys($inArr[0]),$arr);return $arr;}public function swapRowColWithKey($inArr){foreach($inArr as $k1=>$v1) foreach($v1 as $k2=>$v2) $arr[$k2][$k1] = $v2;return $arr;}...
本來你的輸入網頁就應該設計成一行(一個td)用一組變數名,那不就簡單了
foreach($_POST as $name=>$item) { if(is_array($item)) { foreach($item as $key=>$value) { $res[$kek][$name] = $value; } }}$res 就是你要的結果
$fields=array('pinming','guige','xinghao','shuliang','danjia','zongjia');$data=array();foreach($_POST['pinming'] as $key=>$vo){ foreach($fields as $item){ $data[$key][$item]=$_POST[$key][$item]; }}//$data is the result
foreach($_POST as $name=>$item) { if(is_array($item)) { foreach($item as $key=>$value) { $res[$kek][$name] = $value; } }}$res 就是你要的結果
版主你好,加了js以後可能會出現使用者點擊增加一行後什麼也不填寫就提交,這樣會寫一條空記錄,怎麼判斷拋棄空記錄的數組
先完成行列轉換,然後刪去全空的項目
foreach($res as $i=>$item) { if(trim(join('', $item)) == '') unset($res[$i]);}
這種提交沒有必要搞這麼複雜
只要你確定1點就可以簡單化,就是哪一項是必填項,也就是說不可為空的
這裡我假設品名不可為空,那麼程式之需要這樣就可以
foreach($pinming as $key=>$val) { $uparr=array(); if(trim($val)!='') { $uparr['pinming']=$val; $uparr['xinghao']=$pinming[$key]; $uparr['guige']=$guige[$key]; $uparr['shuliang']=$shuliang[$key]; $uparr['danjia']=$danjia[$key]; $uparr['zongjia']=$zongjia[$key]; //這裡加插入資料庫語句 }}
foreach($_POST as $name=>$item) { if(is_array($item)) { foreach($item as $key=>$value) { $res[$kek][$name] = $value; } }}$res 就是你要的結果
版主你好,加了js以後可能會出現使用者點擊增加一行後什麼也不填寫就提交,這樣會寫一條空記錄,怎麼判斷拋棄空記錄的數組
沒有必要要做組合的,你目的不外乎就是逐條插入資料庫,我在7#的代碼就可以滿足了
foreach($_POST as $name=>$item) { if(is_array($item)) { foreach($item as $key=>$value) { $res[$kek][$name] = $value; } }}$res 就是你要的結果
版主你好,加了js以後可能會出現使用者點擊增加一行後什麼也不填寫就提交,這樣會寫一條空記錄,怎麼判斷拋棄空記錄的數組
沒有必要要做組合的,你目的不外乎就是逐條插入資料庫,我在7#的代碼就可以滿足了
我用的是Thinkphp的關聯模型 HAS_MANY 一次性就能提交過去 所以我要傳一個這樣的數組進去!
foreach($_POST as $name=>$item) { if(is_array($item)) { foreach($item as $key=>$value) { $res[$kek][$name] = $value; } }}$res 就是你要的結果
版主你好,加了js以後可能會出現使用者點擊增加一行後什麼也不填寫就提交,這樣會寫一條空記錄,怎麼判斷拋棄空記錄的數組
沒有必要要做組合的,你目的不外乎就是逐條插入資料庫,我在7#的代碼就可以滿足了
我用的是Thinkphp的關聯模型 HAS_MANY 一次性就能提交過去 所以我要傳一個這樣的數組進去!
那我用我的方法一樣可以組合,插入資料庫的地方變成組合新數組形式就可以
也就是
$newarr=array();foreach($pinming as $key=>$val) { $uparr=array(); if(trim($val)!='') { $uparr['pinming']=$val; $uparr['xinghao']=$pinming[$key]; $uparr['guige']=$guige[$key]; $uparr['shuliang']=$shuliang[$key]; $uparr['danjia']=$danjia[$key]; $uparr['zongjia']=$zongjia[$key]; $newarr[]=$uparr; }}
哎,要懂得變通,而不是死思維