質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

275閲覧

同じ商品名かつ値段が同じならまとめたい

c_php

総合スコア29

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/07/09 05:50

いつも勉強させていただいております。

表題の詳細についてですが、
配列内で同じ商品名があれば、その単価、個数、合計を出力するものを作成しました。
それを商品名が同じでかつ単価が同じものだけを合計するようにしたいのですが、
うまくいかず、アドバイスをいただきたいです。

PHP

1$title_price = [ 2 ['りんご','10000'], 3 ['ばなな','8000'], 4 ['りんご','10000'], 5 ['イチゴ','2000'], 6 ['りんご','2000'], 7]; 8$keys = array_values(array_unique(array_column($title_price,0))); 9foreach($keys as $value){ 10 $total_price = 0; 11 $n = 0; 12 foreach($title_price as $row){ 13 if($row[0]==$value){ 14 $total_price = $num + (int)$row[1]; 15 $unit_price = (int)$row[1]; 16 $title_op = $row[0]; 17 $n++; 18 } 19 } 20 $total[$value] = [$title_op,'','','','',$n,'台',$unit_price,$total_price,]; 21}
りんご 3 2,000 22,000 ばなな 1 8,000 8,000 イチゴ 1 2,000 2,000

この結果を

りんご 2 10,000 20,000 りんご 1 2,000 2,000 ばなな 1 8,000 8,000 イチゴ 1 2,000 2,000

となるようにしたいです。

if($row[0]==$value)の条件にand $row[1] ==単価のような条件を足せばいいと思いましたが、$keys = array_values(array_unique(array_column($title_price,0)));で商品名と値段の2つの条件でユニークのものだけを取り出す方法がわかりません。

どうかよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2020/07/09 05:59

同じ種別で同じ単価のものをまとめるということですか?
c_php

2020/07/09 06:05

説明がわかりづらくすいません。 同じ種別で同じ単価のものを最終的に配列に入れなおすという感じです。
guest

回答2

0

こんな感じでどうでしょう?

投稿2020/07/09 06:19

yambejp

総合スコア116835

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2020/07/09 06:19

<?PHP $title_price = [ ['りんご','10000'], ['ばなな','8000'], ['りんご','10000'], ['イチゴ','2000'], ['りんご','2000'], ]; $result=array_map(function($x) use($title_price){ $y=json_decode($x); $z=array_map(function($x){ return $x[1]; },array_filter($title_price,function($x) use($y){ return $x[0]==$y[0] and $x[1]==$y[1]; })); array_unshift($y,count($z)); $y[]=array_sum($z); return $y; },array_unique(array_map(function($x){ return json_encode($x); },$title_price))); print_r($result);
c_php

2020/07/10 01:29

ご回答いただきありがとうございます。 希望の動作をすることができたのですが、 array_mapの使い方が全然わからないので、頑張って読み解いていきたいと思います。 わからないことがあればここで質問させていただくかもしれませんが、お付き合いいただければ幸いです。
guest

0

ベストアンサー

キーを複合で作ってまとめる方法があります。

php

1<?php 2$title_price = [ 3 ['りんご','10000'], 4 ['ばなな','8000'], 5 ['りんご','10000'], 6 ['イチゴ','2000'], 7 ['りんご','2000'], 8]; 9 10$result = []; 11foreach($title_price as $row){ 12 if(isset($result[$row[0] . $row[1]])){ 13 $result[$row[0] . $row[1]] = [$row[0], $result[$row[0] . $row[1]][1] + 1, $row[1]]; 14 } else { 15 $result[$row[0] . $row[1]] = [$row[0], 1, $row[1]];; 16 } 17} 18$ans = array_values($result); 19var_dump($ans);

投稿2020/07/09 06:19

編集2020/07/09 06:19
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

c_php

2020/07/10 01:30

ご回答いただきありがとうございます。 キーを複合にするやり方が知らなかったので勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問