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

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

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

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

PHP

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

Q&A

解決済

2回答

206閲覧

phpの配列から値を検索して表示

AMK

総合スコア765

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

PHP

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

0グッド

1クリップ

投稿2018/03/29 03:04

当初$bittrex_bch=round($bittrex_data['result']['256']['Ask'],3);//BCHのように順番を指定して価格を表示していたが順番が変わって値全く違う値になってしまったので
$bittrex_btc=round($bittrex_data['result']['USDT-BTC']['Ask']
に変更してみたが取得できず

調べた結果
https://teratail.com/questions/113852
に、私のしたい事があったので試してみたのですが値が取得できなかったので何が悪いか?教えて頂きたく投稿させていただきました。

<やりたい事>
https://bittrex.com/api/v1.1/public/getmarketsummaries
のjsonから配列に変換して
'MarketName'のキーが'USDT-BTC'の配列のAskの値を表示したい。

https://bittrex.com/api/v1.1/public/getticker?market=USDT-BTC
このやり方でも値は取得できるのですが、通貨ごとにURLを指定するのも面白くないので向学の為にご教授頂けると助かります。

php

1<?php 2$bittrex_url="https://bittrex.com/api/v1.1/public/getmarketsummaries"; 3$bittrex_response = file_get_contents($bittrex_url, false); 4$bittrex_data = json_decode($bittrex_response, true); 5//var_dump($poloniex_response); 6 7$bittrex_btc=round($bittrex_data['result']['USDT-BTC']['Ask'],3);//BTC ※試してもダメだった 8$bittrex_eth=round($bittrex_data['result']['261']['Ask'],3);//ETH 9$bittrex_bch=round($bittrex_data['result']['256']['Ask'],3);//BCH 10$coin = 'USDT-BTC'; 11$result =[]; 12foreach ($bittrex_data as $arr) { 13 if($arr['MarketName']=== $coin){ 14 $result[]=$arr; 15 } 16} 17var_export($result)."<br>"; 18echo "btc: ".$bittrex_btc."<br>"; 19echo "eth: ".$bittrex_eth."<br>"; 20echo "bch: ".$bittrex_bch."<br>"; 21?>

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

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

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

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

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

yoorwm

2018/03/29 03:19

var_export()している箇所がありますが、それなら$bittrex_dataをvar_export()して見てみると内容が分かるのではないでしょうか?
guest

回答2

0

ベストアンサー

foreach ($bittrex_data as $arr) {
じゃなく
foreach ($bittrex_data['result'] as $arr) {

手元のテストコード、晒します。
(実行するたびに先方のサーバーからデータを取ってしまうと迷惑がかかるので、ローカルに保存したファイルでテストしましたけども。)

php

1<?php 2 3$bittrex_url="https://bittrex.com/api/v1.1/public/getmarketsummaries"; 4$bittrex_response = file_get_contents($bittrex_url, false); 5//$bittrex_response = file_get_contents('getmarketsummaries.json', false); 6$bittrex_data = json_decode($bittrex_response, true); 7//var_dump($bittrex_data['result']); 8$coin = 'USDT-BTC'; 9 10if ($bittrex_data['success']) { 11 foreach ($bittrex_data['result'] as $result) { 12 if ($result['MarketName'] == $coin) { 13 var_dump($result); // お好きなことをどうぞ 14 } 15 } 16}

foreach()使わず、特定のMarketNameだけ使う場合:

php

1<?php 2 3$bittrex_url="https://bittrex.com/api/v1.1/public/getmarketsummaries"; 4$bittrex_response = file_get_contents($bittrex_url, false); 5$bittrex_data = json_decode($bittrex_response, true); 6//var_dump($bittrex_data['result']); 7 8function market_filter($result, $key, $target) { 9 if (array_search($result['MarketName'], $target) !== false) { 10 // こういうことをしたいのかな? 11 echo $result['MarketName'] . "\n"; 12 echo 'Bid -> ' . $result['Bid'] . "\n"; 13 echo 'Ask -> ' . $result['Ask'] . "\n"; 14 } 15} 16 17if ($bittrex_data['success']) { 18 array_walk($bittrex_data['result'], 'market_filter', ['USDT-BTC', 'USDT-ETH', 'USDT-BCC']); 19 20}

array_filter()でコールバック関数を使うと引数を与えられないので、
むしろarray_walk()でコールバック関数のための引数を与えられるようにすることで、
コールバック関数を無駄に増やすことなく実行可能になるのかな、と。

投稿2018/03/29 03:52

編集2018/03/29 08:17
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

AMK

2018/03/29 07:16

ありがとうございます。 出来ました。 if ($bittrex_data['success']) { foreach ($bittrex_data['result'] as $result) { if ($result['MarketName'] == 'USDT-BTC') { $bittrex_data_btc=$result; // お好きなことをどうぞ var_dump($bittrex_data_btc); } if ($result['MarketName'] == 'USDT-ETH') { $bittrex_data_eth=$result; // お好きなことをどうぞ var_dump($bittrex_data_eth); } if ($result['MarketName'] == 'USDT-BCC') { $bittrex_data_bch=$result; // お好きなことをどうぞ var_dump($bittrex_data_bch); } } } で実現できたのですが、もしかして もっとスマートなやり方が有ったりしますか??
退会済みユーザー

退会済みユーザー

2018/03/29 07:50

array_filter()でフィルター用コールバック関数を作れば、余計な要素の消込がしやすいです。
退会済みユーザー

退会済みユーザー

2018/03/29 08:17

array_filter()よりもarray_walk()の方がスマートに書けるので、直しました。
guest

0

階層構造を間違えているからですね。

PHP

1<?php 2 3$bittrex_url="https://bittrex.com/api/v1.1/public/getmarketsummaries"; 4$bittrex_response = file_get_contents($bittrex_url, false); 5$bittrex_data = json_decode($bittrex_response, true); 6 7print_r($bittrex_data); 8

これのJSONデコード結果が、

Array

1Array 2( 3 [success] => 1 4 [message] => 5 [result] => Array 6 ( 7 [0] => Array 8 ( 9 [MarketName] => BTC-2GIVE 10 [High] => 8.3E-7 11 [Low] => 7.6E-7 12 [Volume] => 3566162.4713115 13 [Last] => 7.8E-7 14 [BaseVolume] => 2.81160448 15 [TimeStamp] => 2018-03-29T03:48:06.63 16 [Bid] => 7.7E-7 17 [Ask] => 8.1E-7 18 [OpenBuyOrders] => 108 19 [OpenSellOrders] => 872 20 [PrevDay] => 7.9E-7 21 [Created] => 2016-05-16T06:44:15.287 22 ) 23 24 [1] => Array 25 ( 26 [MarketName] => BTC-ABY 27 [High] => 8.5E-7 28 [Low] => 8.0E-7 29 [Volume] => 1813078.2830155 30 [Last] => 8.2E-7 31 [BaseVolume] => 1.50267376 32 [TimeStamp] => 2018-03-29T03:45:59.923 33 [Bid] => 8.2E-7 34 [Ask] => 8.4E-7 35 [OpenBuyOrders] => 219 36 [OpenSellOrders] => 1867 37 [PrevDay] => 8.2E-7 38 [Created] => 2014-10-31T01:43:25.743 39 ) 40 41 :

こうですから、例えばドルテザー-ビットコで調べたかったら

PHP

1foreach ($bittrex_data["result"] as $market_info) 2{ 3 if($market_info["MarketName"] !== "USDT-BTC") { continue; } 4 5 echo $market_info["Ask"]; 6}

みたいな感じですね。(未テスト)

投稿2018/03/29 03:54

編集2018/03/29 03:59
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問