ホームページ > バックエンド開発 > PHPチュートリアル > 複数行のデータの配列を結合する際に問題があります~~結合方法がまったくわかりません。アドバイスをお願いします。

複数行のデータの配列を結合する際に問題があります~~結合方法がまったくわかりません。アドバイスをお願いします。

WBOY
リリース: 2016-06-23 14:14:14
オリジナル
1017 人が閲覧しました



上記のフォームと同様に、js を追加しない場合、行ごとに 1 つのデータをデータベースに書き込む必要はありません。この配列の組み合わせ方が分かりません
私のフォームは以下のように設定しています:

<table width="100%" border="0" cellspacing="0" cellpadding="0">  <tr>    <td>    品名:<input name="pinming[]" type="text" value="">    型号:<input name="xinghao[]" type="text" value="">    规格:<input name="guige[]" type="text" value="">    数量:<input name="shuliang[]" type="text" value="">    单价:<input name="danjia[]" type="text" value="">    总价:<input name="zongjia[]" type="text" value="">    </td>  </tr>  <tr>    <td>    品名:<input name="pinming[]" type="text" value="">    型号:<input name="xinghao[]" type="text" value="">    规格:<input name="guige[]" type="text" value="">    数量:<input name="shuliang[]" type="text" value="">    单价:<input name="danjia[]" type="text" value="">    总价:<input name="zongjia[]" type="text" value="">    </td>  </tr>  </table>
ログイン後にコピー


得られた配列はこんな感じ
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;	}...
ログイン後にコピー

本来、入力 Web ページは一連の変数名を含む 1 行 (1 つの 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 を追加した後、ユーザーは行を追加して何も入力しないで送信できます。これにより、空のレコードが書き込まれます。破棄された空のレコードの配列を判断する方法です。目的のために、組み合わせを行う必要はありません。データベースに 1 つずつ挿入するだけです。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;   }}
ログイン後にコピー


厳密ではなく柔軟になる方法を知っておく必要があります。考え中

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート