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

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

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

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

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

Q&A

2回答

6209閲覧

PHP 配列同士で値を比べ、引き算を行う方法。

amaguri

総合スコア227

PHP

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

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

0グッド

0クリップ

投稿2017/04/04 09:28

編集2017/04/04 09:55
--orm-- $date =date('Y-m-d'); $points = \Model_Point::query() ->where("expiration",">=","$date") ->order_by("user_id") ->get(); $data = array(); $data2 = array(); foreach($points as $point){ $data[$point->user_id_id] = isset($data[$point->user_id]) ? $data[$point->user_id] + $point->point : $point->point; $data2[$point->user_id] = (int)$point->member->point; } var_dump($data2); var_dump($data); --結果-- //$data// array(4) { [6]=> int(206010) [11]=> int(2000) [20]=> int(2000) [21]=> int(4000) } //$data2// array(4) { [6]=> int(239010) [11]=> int(5000) [20]=> int(2000) [21]=> int(32000) }

このようなデータになっていて

同じid同士で if($data2[id]=point > $data[id]=>point ){ $data2[id]=>point - $data[id]=>point = $引かれたポイント数 } を実行しようとする場合はどうしたらいいのでしょうか? 下でさらに var_dump(array_diff_key($data2,$data)); で差分を作ろうとしたのですがうまくいかずいきませんでした 追記 (int)で合わせたのですがうまくい起きませんでした・・

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

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

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

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

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

guest

回答2

0

下記では$data2を中心に、$dataを検索して$data2-$dataの差分を出すようにしています。

php

1<?php 2$data = array('1'=>10,'2'=>20,'3'=>30); 3$data2 = array('1'=>30,'2'=>20,'3'=>10,'4'=>40); 4 5foreach ($data2 as $key => $value) { 6 //キーが存在しているかどうかを検索する 7 if(array_key_exists($key, $data)==true){ 8 //存在していれば$data2から$dataを引いた値をセット 9 echo $value - $data[$key].'<br/>'; 10 } else{ 11 //存在していなければ、$data2の値をそのまま出力 12 echo $value.'<br/>'; 13 } 14}

投稿2017/04/05 00:59

motuo

総合スコア3027

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

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

amaguri

2017/04/06 01:20

回答ありがとうございます! 試してみたいと思います!
guest

0

配列の長さが同じなら次のような方法も考えられます。

php

1$sub_values = array_map(function($x, $y) { return $x - $y; }, $data2, $data); 2$sub_data = array_combine(array_keys($data), $sub_values); 3$sub_points = array_filter($sub_data);

idの順序が不揃いであればarray_mapする前にksortで整列したほうが良いかもしれません。
また、差分0の要素を残すならarray_filterも不要です。

投稿2017/04/05 16:39

buhoho

総合スコア16

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

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

amaguri

2017/04/06 01:21

回答ありがとうございます。 なるほど配列が同じならこういう実装もできるんですね!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問