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

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

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

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

Q&A

解決済

2回答

494閲覧

多次元配列のMAX値を特定して出力する方法

study_wakaba

総合スコア1

PHP

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

0グッド

1クリップ

投稿2021/02/21 09:11

編集2021/02/21 12:29

解決したいこと

・多次元配列のキーを指定、MAX値の出力
・特定したMAX値が含まれる配列を出力

以下、具体的に書きます。下記コードと合わせて参照ください。

//
対象配列3つ
$VideoSize0、$VideoSize1、$VideoSize2 

max値を特定するキー
"bitrate"(これの値を比較したい)

出力したい配列のキー
"url"(これの値を出力したい)
//

対象配列3つの内、キー"bitrate"の値が最も大きい配列を特定して、
その"bitrate"のmax値を持つ配列から、キー"url"の値を出力したい。

該当するソースコード

<?php $VideoSize0 = [ "bitrate" => 1000, "url" => "hogehoge0" ]; $VideoSize1 = [ "bitrate" => 1100, "url" => "hogehoge1" ]; $VideoSize2 = [ "bitrate" => 1200, "url" => "hogehoge2" ]; $VideoSize = [$VideoSize0, $VideoSize1, $VideoSize2]; print_r (array_column ($VideoSize, "bitrate")); echo "MAX:" .max(array_column ($VideoSize, "bitrate")). "ビットレート"; ?>

自分で試したこと

解決したいことの一つ目
「 ・多次元配列のキーを指定、MAX値の出力 」については、
「 max(array_column ($VideoSize, "bitrate")) 」こちらでMAX値を出力することができました。
他にも方法を調べて見つけましたが、分かり易いコードを選びました。

解決したいことの二つ目
「 ・特定したMAX値が含まれる配列を出力 」については、
if文や関数を使った方法を模索しましたが、見つかりませんでした。

よろしくお願いします。

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

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

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

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

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

m.ts10806

2021/02/21 09:24

提示されたコードは動きません。 hogehoge0,hogehoge1,hogehoge2という定数が定義されてません。 >Fatal error: Uncaught Error: Undefined constant "hogehoge0 例示するのは良いのですが、解決したい問題以外が起きてない状態に配慮してもらえると回答する側としては助かります。
guest

回答2

0

ベストアンサー

php

1$url= array_reduce([$VideoSize1, $VideoSize2],function($x,$y){ 2 return $x["bitrate"]>$y["bitrate"]?$x:$y; 3},$VideoSize0)["url"]; 4print_r($url);

投稿2021/02/21 11:51

yambejp

総合スコア116724

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

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

study_wakaba

2021/02/22 14:21 編集

回答ありがとうございます。 反応に時間がかかってしまいすみません。いただいた回答で望んだ結果が実行されました!感謝します。 ・配列の各要素をひとつの値にまとめる、 array_reduce()  ⇒指定した配列にコールバック関数を反復処理し、ひとつの値にまとめる ・反復処理をする配列が、 ([$VideoSize1, $VideoSize2],  また、処理の最初に指定する配列が、 ,$VideoSize0)  ⇒コールバック関数で一つにまとめたい配列をそれぞれ記述 ・コールバック関数が、 function($x,$y){}  ⇒"bitrate"が大きいを値を取るように反復処理する関数を記述 ・反復処理する内容が、 {return $x["bitrate"]>$y["bitrate"]?$x:$y;}  ⇒比較演算子と値を比較、三項演算子で実行する値を選択する 違った視点でシンプルな考え方が出来ました。データベースの処理で応用が出来そうなので、ベストアンサーとさせて頂きます。勉強になりました。今後はコードの速度差も選考してみます。
guest

0

こういうことでしょうか

PHP

1var_dump(array_filter($VideoSize, function($row) use ($VideoSize) { 2 return $row['bitrate'] == max(array_column ($VideoSize, "bitrate")); 3}));

投稿2021/02/21 11:31

pinoko

総合スコア127

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

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

study_wakaba

2021/02/22 12:33

早速の回答ありがとうございます。 反応に時間がかかってしまいすみません。いただいた回答で望んだ結果が実行されました!感謝します。 ・max値を含む配列を返す部分が、array_filter()  ⇒戻り値にコールバック関数でフィルタリングされた結果の配列が返る ・コールバック関数が、function($row) use ($VideoSize){}  ⇒関数でmax値がフィルタリングされるように記述 ・max値をフィルタリングする処理内容が、 return $row['bitrate'] == max(array_column ($VideoSize, "bitrate"));  ⇒比較演算子 == で左辺と右辺が等しいか比較して真偽値が返る  ⇒左辺と右辺どちらも同じ値のため真  ⇒左辺はuseを使って変数名をエイリアスしている 解決したいこと、自身で試したことに寄り添った回答、ありがとうございます!回答に対して理解不足があるので、調べて確認してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問