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

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

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

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

Q&A

解決済

配列を座標を考慮して入れ替えたい

ratezou
goola

総合スコア34

PHP

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

1回答

0グッド

0クリップ

174閲覧

投稿2023/01/22 03:28

編集2023/01/22 03:32

サイト作成の勉強中です。

元となる配列があります。

array(2) { ["pages"]=> array(1) { [0]=> array(3) { ["width"]=> int(4032) ["height"]=> int(3024) ["blocks"]=> array(3) { [0]=> array(3) { ["boundingBox"]=> array(1) { ["vertices"]=> array(4) { [0]=> array(2) { ["x"]=> int(1874) ["y"]=> int(2389) } [1]=> array(2) { ["x"]=> int(1844) ["y"]=> int(2032) } [2]=> array(2) { ["x"]=> int(2043) ["y"]=> int(2015) } [3]=> array(2) { ["x"]=> int(2073) ["y"]=> int(2372) } } } ["paragraphs"]=> array(1) { [0]=> array(2) { ["boundingBox"]=> array(1) { ["vertices"]=> array(4) { [0]=> array(2) { ["x"]=> int(1874) ["y"]=> int(2389) } [1]=> array(2) { ["x"]=> int(1844) ["y"]=> int(2032) } [2]=> array(2) { ["x"]=> int(2043) ["y"]=> int(2015) } [3]=> array(2) { ["x"]=> int(2073) ["y"]=> int(2372) } } } ["words"]=> array(2) { [0]=> array(2) { ["boundingBox"]=> array(1) { ["vertices"]=> array(4) { [0]=> array(2) { ["x"]=> int(1874) ["y"]=> int(2389) } [1]=> array(2) { ["x"]=> int(1860) ["y"]=> int(2227) } [2]=> array(2) { ["x"]=> int(2059) ["y"]=> int(2210) } [3]=> array(2) { ["x"]=> int(2073) ["y"]=> int(2372) } } } ["symbols"]=> array(1) { [0]=> array(3) { ["property"]=> array(1) { ["detectedBreak"]=> array(1) { ["type"]=> string(5) "SPACE" } } ["boundingBox"]=> array(1) { ["vertices"]=> array(4) { [0]=> array(2) { ["x"]=> int(1874) ["y"]=> int(2389) } [1]=> array(2) { ["x"]=> int(1860) ["y"]=> int(2227) } [2]=> array(2) { ["x"]=> int(2059) ["y"]=> int(2210) } [3]=> array(2) { ["x"]=> int(2073) ["y"]=> int(2372) } } } ["text"]=> string(1) "A" } } } [1]=> array(2) { ["boundingBox"]=> array(1) { ["vertices"]=> array(4) { [0]=> array(2) { ["x"]=> int(1856) ["y"]=> int(2181) } [1]=> array(2) { ["x"]=> int(1843) ["y"]=> int(2033) } [2]=> array(2) { ["x"]=> int(2043) ["y"]=> int(2016) } [3]=> array(2) { ["x"]=> int(2055) ["y"]=> int(2164) } } } ["symbols"]=> array(1) { [0]=> array(3) { ["property"]=> array(1) { ["detectedBreak"]=> array(1) { ["type"]=> string(10) "LINE_BREAK" } } ["boundingBox"]=> array(1) { ["vertices"]=> array(4) { [0]=> array(2) { ["x"]=> int(1856) ["y"]=> int(2181) } [1]=> array(2) { ["x"]=> int(1843) ["y"]=> int(2033) } [2]=> array(2) { ["x"]=> int(2043) ["y"]=> int(2016) } [3]=> array(2) { ["x"]=> int(2055) ["y"]=> int(2164) } } } ["text"]=> string(1) "1" } } } } } } ["blockType"]=> string(4) "TEXT" } [1]=> array(3) { ["boundingBox"]=> array(1) { ["vertices"]=> array(4) { [0]=> array(2) { ["x"]=> int(2267) ["y"]=> int(2427) } [1]=> array(2) { ["x"]=> int(2250) ["y"]=> int(2075) } [2]=> array(2) { ["x"]=> int(2452) ["y"]=> int(2065) } [3]=> array(2) { ["x"]=> int(2470) ["y"]=> int(2417) } } } ["paragraphs"]=> array(1) { [0]=> array(2) { ["boundingBox"]=> array(1) { ["vertices"]=> array(4) { [0]=> array(2) { ["x"]=> int(2267) ["y"]=> int(2427) } [1]=> array(2) { ["x"]=> int(2250) ["y"]=> int(2075) } [2]=> array(2) { ["x"]=> int(2452) ["y"]=> int(2065) } [3]=> array(2) { ["x"]=> int(2470) ["y"]=> int(2417) } } } ["words"]=> array(2) { [0]=> array(2) { ["boundingBox"]=> array(1) { ["vertices"]=> array(4) { [0]=> array(2) { ["x"]=> int(2267) ["y"]=> int(2427) } [1]=> array(2) { ["x"]=> int(2260) ["y"]=> int(2278) } [2]=> array(2) { ["x"]=> int(2462) ["y"]=> int(2268) } [3]=> array(2) { ["x"]=> int(2470) ["y"]=> int(2417) } } } ["symbols"]=> array(1) { [0]=> array(3) { ["property"]=> array(1) { ["detectedBreak"]=> array(1) { ["type"]=> string(5) "SPACE" } } ["boundingBox"]=> array(1) { ["vertices"]=> array(4) { [0]=> array(2) { ["x"]=> int(2267) ["y"]=> int(2427) } [1]=> array(2) { ["x"]=> int(2260) ["y"]=> int(2278) } [2]=> array(2) { ["x"]=> int(2462) ["y"]=> int(2268) } [3]=> array(2) { ["x"]=> int(2470) ["y"]=> int(2417) } } } ["text"]=> string(1) "B" } } } [1]=> array(2) { ["boundingBox"]=> array(1) { ["vertices"]=> array(4) { [0]=> array(2) { ["x"]=> int(2256) ["y"]=> int(2211) } [1]=> array(2) { ["x"]=> int(2249) ["y"]=> int(2075) } [2]=> array(2) { ["x"]=> int(2452) ["y"]=> int(2065) } [3]=> array(2) { ["x"]=> int(2459) ["y"]=> int(2201) } } } ["symbols"]=> array(1) { [0]=> array(3) { ["property"]=> array(1) { ["detectedBreak"]=> array(1) { ["type"]=> string(10) "LINE_BREAK" } } ["boundingBox"]=> array(1) { ["vertices"]=> array(4) { [0]=> array(2) { ["x"]=> int(2256) ["y"]=> int(2211) } [1]=> array(2) { ["x"]=> int(2249) ["y"]=> int(2075) } [2]=> array(2) { ["x"]=> int(2452) ["y"]=> int(2065) } [3]=> array(2) { ["x"]=> int(2459) ["y"]=> int(2201) } } } ["text"]=> string(1) "1" } } } } } } ["blockType"]=> string(4) "TEXT" } [2]=> array(3) { ["boundingBox"]=> array(1) { ["vertices"]=> array(4) { [0]=> array(2) { ["x"]=> int(1862) ["y"]=> int(1160) } [1]=> array(2) { ["x"]=> int(1855) ["y"]=> int(699) } [2]=> array(2) { ["x"]=> int(2437) ["y"]=> int(690) } [3]=> array(2) { ["x"]=> int(2444) ["y"]=> int(1151) } } } ["paragraphs"]=> array(2) { [0]=> array(2) { ["boundingBox"]=> array(1) { ["vertices"]=> array(4) { [0]=> array(2) { ["x"]=> int(1865) ["y"]=> int(1149) } [1]=> array(2) { ["x"]=> int(1856) ["y"]=> int(742) } [2]=> array(2) { ["x"]=> int(2048) ["y"]=> int(738) } [3]=> array(2) { ["x"]=> int(2057) ["y"]=> int(1145) } } } ["words"]=> array(2) { [0]=> array(2) { ["boundingBox"]=> array(1) { ["vertices"]=> array(4) { [0]=> array(2) { ["x"]=> int(1865) ["y"]=> int(1149) } [1]=> array(2) { ["x"]=> int(1861) ["y"]=> int(964) } [2]=> array(2) { ["x"]=> int(2053) ["y"]=> int(960) } [3]=> array(2) { ["x"]=> int(2057) ["y"]=> int(1145) } } } ["symbols"]=> array(1) { [0]=> array(3) { ["property"]=> array(1) { ["detectedBreak"]=> array(1) { ["type"]=> string(5) "SPACE" } } ["boundingBox"]=> array(1) { ["vertices"]=> array(4) { [0]=> array(2) { ["x"]=> int(1865) ["y"]=> int(1149) } [1]=> array(2) { ["x"]=> int(1861) ["y"]=> int(964) } [2]=> array(2) { ["x"]=> int(2053) ["y"]=> int(960) } [3]=> array(2) { ["x"]=> int(2057) ["y"]=> int(1145) } } } ["text"]=> string(1) "A" } } } [1]=> array(2) { ["boundingBox"]=> array(1) { ["vertices"]=> array(4) { [0]=> array(2) { ["x"]=> int(1860) ["y"]=> int(934) } [1]=> array(2) { ["x"]=> int(1856) ["y"]=> int(742) } [2]=> array(2) { ["x"]=> int(2048) ["y"]=> int(738) } [3]=> array(2) { ["x"]=> int(2052) ["y"]=> int(930) } } } ["symbols"]=> array(1) { [0]=> array(3) { ["property"]=> array(1) { ["detectedBreak"]=> array(1) { ["type"]=> string(10) "LINE_BREAK" } } ["boundingBox"]=> array(1) { ["vertices"]=> array(4) { [0]=> array(2) { ["x"]=> int(1860) ["y"]=> int(934) } [1]=> array(2) { ["x"]=> int(1856) ["y"]=> int(742) } [2]=> array(2) { ["x"]=> int(2048) ["y"]=> int(738) } [3]=> array(2) { ["x"]=> int(2052) ["y"]=> int(930) } } } ["text"]=> string(1) "2" } } } } } [1]=> array(2) { ["boundingBox"]=> array(1) { ["vertices"]=> array(4) { [0]=> array(2) { ["x"]=> int(2216) ["y"]=> int(1154) } [1]=> array(2) { ["x"]=> int(2212) ["y"]=> int(694) } [2]=> array(2) { ["x"]=> int(2437) ["y"]=> int(692) } [3]=> array(2) { ["x"]=> int(2441) ["y"]=> int(1152) } } } ["words"]=> array(1) { [0]=> array(2) { ["boundingBox"]=> array(1) { ["vertices"]=> array(4) { [0]=> array(2) { ["x"]=> int(2216) ["y"]=> int(1154) } [1]=> array(2) { ["x"]=> int(2212) ["y"]=> int(694) } [2]=> array(2) { ["x"]=> int(2437) ["y"]=> int(692) } [3]=> array(2) { ["x"]=> int(2441) ["y"]=> int(1152) } } } ["symbols"]=> array(2) { [0]=> array(2) { ["boundingBox"]=> array(1) { ["vertices"]=> array(4) { [0]=> array(2) { ["x"]=> int(2217) ["y"]=> int(1154) } [1]=> array(2) { ["x"]=> int(2215) ["y"]=> int(981) } [2]=> array(2) { ["x"]=> int(2439) ["y"]=> int(979) } [3]=> array(2) { ["x"]=> int(2441) ["y"]=> int(1152) } } } ["text"]=> string(1) "B" } [1]=> array(3) { ["property"]=> array(1) { ["detectedBreak"]=> array(1) { ["type"]=> string(10) "LINE_BREAK" } } ["boundingBox"]=> array(1) { ["vertices"]=> array(4) { [0]=> array(2) { ["x"]=> int(2214) ["y"]=> int(921) } [1]=> array(2) { ["x"]=> int(2212) ["y"]=> int(694) } [2]=> array(2) { ["x"]=> int(2436) ["y"]=> int(692) } [3]=> array(2) { ["x"]=> int(2438) ["y"]=> int(919) } } } ["text"]=> string(1) "2" } } } } } } ["blockType"]=> string(4) "TEXT" } } } } ["text"]=> string(14) "A 1 B 1 A 2 B2" }

この配列をpage、block、paragraph、word、symbolという風に順に読み込んんで、
symbolが保持する、情報(x y, text)を取り出して、x, y の順序でtextを整形したいです。

具体的には、以下の記事をPHPで書き換えたいです。
https://qiita.com/shoku-pan/items/bf5645894803769edc72

自分なりにやってみたんですが・・・

$text = $array_json["responses"]["0"]["fullTextAnnotation"]; $bound = array(); foreach ($text as $pages){ foreach ($pages as $blocks) { foreach ($blocks as $paragraphs) { foreach ($paragraphs as $words) { foreach ($words as $symbols) { foreach ($symbols as $symbol) { array_push($bound, $symbol); } } } } } } var_dump($bound);

$symbolと関係の無い情報も入っているように見えます。

array(7) { [0]=> array(4) { [0]=> array(2) { ["x"]=> int(1874) ["y"]=> int(2389) } [1]=> array(2) { ["x"]=> int(1844) ["y"]=> int(2032) } [2]=> array(2) { ["x"]=> int(2043) ["y"]=> int(2015) } [3]=> array(2) { ["x"]=> int(2073) ["y"]=> int(2372) } } [1]=> array(2) { ["boundingBox"]=> array(1) { ["vertices"]=> array(4) { [0]=> array(2) { ["x"]=> int(1874) ["y"]=> int(2389) } [1]=> array(2) { ["x"]=> int(1844) ["y"]=> int(2032) } [2]=> array(2) { ["x"]=> int(2043) ["y"]=> int(2015) } [3]=> array(2) { ["x"]=> int(2073) ["y"]=> int(2372) } } } ["words"]=> array(2) { [0]=> array(2) { ["boundingBox"]=> array(1) { ["vertices"]=> array(4) { [0]=> array(2) { ["x"]=> int(1874) ["y"]=> int(2389) } [1]=> array(2) { ["x"]=> int(1860) ["y"]=> int(2227) } [2]=> array(2) ※最初の一部

上記記事の
x = symbol.bounding_box.vertices[0].x
y = symbol.bounding_box.vertices[0].y
text = symbol.text
bounds.append([x, y, text, symbol.bounding_box])
PHPの$boudには、このフォーマットでないデータも含まれているためです。

多分、foreachの回し方が間違っていると思うのですが、とっかかりもなく困っています。
アドバイスのほどよろしくお願いします。

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

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

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

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答1

0

自己解決

以下のコードでx座標、y座標、テキストのデータを取得できました。

php

1$document = $array_json["responses"]["0"]["fullTextAnnotation"]; 2$arr = array(); 3foreach ($document["pages"] as $pages){ 4 foreach ($pages["blocks"] as $block) { 5 foreach ($block["paragraphs"] as $paragraph) { 6 foreach ($paragraph["words"] as $words) { 7 foreach ($words["symbols"] as $symbol) { 8 $x = $symbol["boundingBox"]["vertices"]["0"]["x"]; 9 $y = $symbol["boundingBox"]["vertices"]["0"]["y"]; 10 $text = $symbol["text"]; 11 array_push($arr, $x, $y, $text); 12 } 13 } 14 } 15 } 16} 17var_dump($arr);

今度はこれを座標に貼り付けて、行で読み込むようにしたいのですが、別の質問にします。

投稿2023/01/22 05:20

ratezou

総合スコア34

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

PHP

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