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

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

新規登録して質問してみよう
ただいま回答率
85.50%
多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

PHP

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

993閲覧

PHP 二次元配列 加算方法

n_k23

総合スコア21

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

PHP

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/11/09 09:29

前提・解決したいこと

現在配列の勉強をしており二次元配列の基準のものを
代入用のものにカウントしていきたいです。

発生している問題

php

1<?php 2//基準の配列 3$shoppingBasket = [ 4 ['fruit' => 'apple', 'price' =>150], 5 ['fruit' => 'orange', 'price' =>150], 6 ['fruit' => 'grape', 'price' =>300], 7 ['fruit' => 'strawberry', 'price' =>300], 8 ['fruit' => 'pineapple', 'price' =>500], 9]; 10//代入用 11$fruits = [ 12 ['apple'=>0], 13 ['orange'=>0], 14 ['grape'=>0], 15 ['strawberry'=>0], 16 ['pineapple'=>0], 17]; 18//処理 19 20var_dump($fruits); 21// 実現したいこと 22Array 23( 24 [0] => Array 25 ( 26 [apple] => 1 27 ) 28 29 [1] => Array 30 ( 31 [orange] => 1 32 ) 33 34 [2] => Array 35 ( 36 [grape] => 1 37 ) 38 39 [3] => Array 40 ( 41 [strawberry] => 1 42 ) 43 44 [4] => Array 45 ( 46 [pineapple] => 1 47 ) 48)

試したこと

array_columnでまず分解してからarray_merge_recursive(array_merge)を
使用し処理してみたが、後に追加されるだけで代入用に追加されない。

PHP

1$fruit = array_column($shoppingBasket, 'fruit'); 2$me = array_merge_recursive($fruits,$fruit); 3print_r($me); 4//結果 5Array 6( 7 [0] => Array 8 ( 9 [apple] => 0 10 ) 11 12 [1] => Array 13 ( 14 [orange] => 0 15 ) 16 17 [2] => Array 18 ( 19 [grape] => 0 20 ) 21 22 [3] => Array 23 ( 24 [strawberry] => 0 25 ) 26 27 [4] => Array 28 ( 29 [pineapple] => 0 30 ) 31 32 [5] => apple 33 [6] => orange 34 [7] => grape 35 [8] => strawberry 36 [9] => pineapple 37)

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答2

0

ベストアンサー

$fruitのデータの持ち方は最悪だと思いますができないことはないです

PHP

1foreach($fruits as &$fruit){ 2 $fruit[array_keys($fruit)[0]]=count(array_filter($shoppingBasket,function($x) use($fruit){ 3 return $x["fruit"]==array_keys($fruit)[0]; 4 })); 5} 6print_r($fruits);

$fruitsを調整したもの

PHP

1$shoppingBasket = [ 2 ['fruit' => 'apple', 'price' =>150], 3 ['fruit' => 'orange', 'price' =>150], 4 ['fruit' => 'grape', 'price' =>300], 5 ['fruit' => 'strawberry', 'price' =>300], 6 ['fruit' => 'pineapple', 'price' =>500], 7 ]; 8$fruits = [ 9 'apple'=>0, 10 'orange'=>0, 11 'grape'=>0, 12 'strawberry'=>0, 13 'pineapple'=>0, 14 ]; 15foreach(array_keys($fruits) as $fruit){ 16 $fruits[$fruit]=count(array_filter($shoppingBasket,function($x) use($fruit){ 17 return $x["fruit"]==$fruit; 18 })); 19} 20 print_r($fruits); 21

投稿2021/11/10 02:17

編集2021/11/10 02:43
yambejp

総合スコア114572

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

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

n_k23

2021/11/10 02:33

yambejp様 ご回答ありがとうございます。 matherさんにも言われましたが$fruitsのデータの持ち方が良くないと言われました。 良ければこれがmatherさんの指摘された配列だとどうなるのでしょうか? ご教授願えないでしょうか。 よろしくお願いします。
yambejp

2021/11/10 02:43

調整版を追記しました
n_k23

2021/11/10 03:44

yambejp様 ご回答ありがとうございます。 とても勉強になりました。
guest

0

そもそも array_merge(_recursive) には「同じキーが存在したらその値を +1 する」のような都合のいい機能はありません。
数値でないキーの場合は上書きしますし、数値キーであれば追加されます。
PHP - array_merge_recursive

代入用の配列は二次元である必要はないでしょう。

php

1$fruits = [ 2 'apple'=>0, 3 'orange'=>0, 4 'grape'=>0, 5 'strawberry'=>0, 6 'pineapple'=>0, 7];

あとは $shoppingBasket の各要素についてループして見つかったキーの値についてインクリメント (+1) するだけだと思います。

投稿2021/11/09 10:31

mather

総合スコア6753

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

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

n_k23

2021/11/09 10:45

mather様 ご回答ありがとうございます。 確かに公式を見るとそのように書かれていますね。 早速検証してみます。
n_k23

2021/11/09 11:01

mather様 申し訳ありません。 色々と加算しようと手を加えてみたのですがうまくいきませんでした。 ご教授願えないでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問