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

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

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

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

Q&A

解決済

3回答

3799閲覧

PHPで階層構造になった連想配列をキーごとに値をまとめる方法

xekid

総合スコア15

PHP

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

0グッド

3クリップ

投稿2017/04/22 13:45

以下のような階層構造になった連想配列を

lang

1$array = array(0 => array(1 => 2), 2 1 => array(2 => 3), 3 2 => array(3 => 3), 4 3 => array(1 => 5), 5 4 => array(2 => 6) 6 );

以下のように普通の連想配列にしてキーの値ごとに計算して出力したいのですがPHPでの記述の仕方が解りません。
どなたかPHPでの記述の仕方を教えて頂けると有難いです。
よろしくお願いします。

lang

1$array2 = array(1 => 7, 2 2 => 9, 3 3 => 3 4 );

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

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

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

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

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

guest

回答3

0

ベストアンサー

php

1<?php 2 3$array = [ 4 [1 => 2], 5 [2 => 3], 6 [3 => 3], 7 [1 => 5], 8 [2 => 6], 9]; 10 11$array2 = []; 12foreach ($array as $pair) { 13 if (!isset($array2[key($pair)])) $array2[key($pair)] = 0; 14 $array2[key($pair)] += current($pair); 15} 16 17var_export($array2);

【別解】 最初から埋めておくのもあり

php

1<?php 2 3$array = [ 4 [1 => 2], 5 [2 => 3], 6 [3 => 3], 7 [1 => 5], 8 [2 => 6], 9]; 10 11$array2 = array_fill_keys(array_map('key', $array), 0); 12foreach ($array as $pair) { 13 $array2[key($pair)] += current($pair); 14} 15 16var_export($array2);

投稿2017/04/22 14:24

編集2017/04/22 14:32
mpyw

総合スコア5223

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

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

xekid

2017/04/23 07:45

回答有難うございます。 今回、回答頂いた皆様のコードは期待通りの答えを頂いたので悩みましたが mpywさんが一番高評価を得ていたこともあり、ベストアンサーに選ばさせて頂きました。 有難うございました。
guest

0

php

1<?php 2 3$array = [ 4 0 => [1 => 2], 5 1 => [2 => 3], 6 2 => [3 => 3], 7 3 => [1 => 5], 8 4 => [2 => 6] 9]; 10 11$res = []; 12foreach ($array as $arr) { 13 foreach ($arr as $k => $v) { 14 $res[$k] = $v + (isset($res[$k]) ? $res[$k] : 0); 15 } 16} 17var_dump($res); 18

投稿2017/04/22 13:54

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

xekid

2017/04/23 07:39

回答有難うございます。 是非参考にさせて頂きます。
guest

0

一発でやる関数はなさそうなので、自分でforeachを回しましょう。

php

1$array2 = array(); 2 3foreach($array as $row) { 4 // きれいに値を取れないので、1個だとわかっているけどforeachに投げる 5 foreach($row as $key => $val) { 6 if(empty($array2[$key])) $array2[$key] = 0; 7 $array2[$key] += $val; 8 } 9} 10

投稿2017/04/22 13:50

maisumakun

総合スコア145183

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

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

xekid

2017/04/23 07:37

最速の回答を有難うございます。 参考にさせて頂きます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問