質問するログイン新規登録
PHP

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

Q&A

解決済

3回答

678閲覧

array_searchを使用しない処理に置き換えたい

kumo_001

総合スコア1

PHP

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

0グッド

0クリップ

投稿2022/09/12 23:20

編集2022/09/13 01:34

0

0

現在array_searchを使用して問題無く動かせている処理があるのですが、
配列の数が増えてくると重くなるのだろうかと思い別の処理を考えています。

実現したいこと

・特定の多次元配列を取得

現在の処理

PHP

1$data = [ 2 ['日付', '名前', '番号', 'aaa'], 3 ['日付', '名前', '番号', 'bbb']//... 4];  5 6$search_word = 'aaa'; 7$search_data = array_search($search_word, array_column($data, 3)); 8 9$day = $data[$search_data][0];//...

置き換えようとした処理

PHP

1$data_aaa = ['日付', '名前', '番号']; 2$data_bbb = ['日付', '名前', '番号'];//... 3 4$search_word = 'aaa'; 5$data = ${'data_' . $search_word}; 6 7$day = $data[0];//...

下でも同じことはできたのですが
変数が増加するのはあまり効果が無さそうに感じます。

無理にいじろうとせずarray_searchを使用したほうが良いでしょうか?
方法を変えても体感速度に変化が無いのであればそのままにしようと思っています。

何か良い実装方法がありましたらご教授いただければ幸いです。

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

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

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

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

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

guest

回答3

0

ベストアンサー

同じ配列に対して同じ方法で頻繁に検索をかけるのであれば、配列の入れ方を変えるのも1つの手段かと思います。

php

1$data = [ 2 ['日付', '名前', '番号', 'aaa'], 3 ['日付', '名前', '番号', 'bbb']//... 4]; 5 6$keyed = array_combine(array_column($data, 3), $data); 7 8// 検索方法 9$keyed['aaa'];

投稿2022/09/12 23:27

maisumakun

総合スコア146702

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

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

kumo_001

2022/09/13 01:22

array_combine、初めて知りました。 これがちょうど欲しかった機能かもしれません。 こちらを元に少し考え直してみようかと思います。 この件以外でも使える良い機能を知ることができました。 ありがとうございます。
kumo_001

2022/09/13 13:45

最終的にarray_combineを実行した結果と同じ形式に配列を変更しました。 $data = [ 'aaa' => ['日付', '名前', '番号'] ]; $search_word = 'aaa'; $search_data = $data[$search_word]; 見た目すっきりして分かりやすくなりました! 多次元配列ばかり使っていて連想配列を使うという発想が全く無かったので大変助かりました。 ありがとうございました。
guest

0

PHP

1$data = [ 2 ['日付', '名前', '番号', 'aaa'], 3 ['日付', '名前', '番号', 'bbb'], 4 ['日付', '名前', '番号', 'aaa'], 5 ['日付', '名前', '番号', 'bbb'], 6]; 7 8$search_word = 'aaa'; 9$result=array_filter($data,function($x) use($search_word){ 10 return in_array($search_word,$x); 11}); 12print_r($result);

投稿2022/09/13 00:09

yambejp

総合スコア117967

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

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

kumo_001

2022/09/13 01:21

ありがとうございます。 $search_wordで調べる配列値に同じ値は存在しませんので1つだけになります。 記載するのを失念しておりました、申し訳ございません。 functionの付くコードのことがまだ理解できていないもので自分には少し難しいですがarray_filter、便利な機能ですね。他の箇所で使ってみようと思います。
guest

0

パフォーマンスへの影響はほぼないかと思いますが、
変数の増加=その分の箱の増加
と考えて良いので、それなら箱の中身だけの変化の方が良いかと思いますし、
$dataが実際にどう取得されるかによりますが、外出しも可能なのであれば
メインロジックをいじる必要がなくなる前者のほうがメンテナンス性が良いかと思います。

投稿2022/09/12 23:25

m.ts10806

総合スコア80888

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

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

kumo_001

2022/09/13 00:50

ありがとうございます。 やはり変数は無駄に作らないほうが良さそうですね。 $dataは配列が初めから完成した状態で別ファイルにまとめてあるもので、include読み込みで取得します。
m.ts10806

2022/09/13 00:55

「外出し」と言った意味では、設定ファイルか、もしくはデータベースにした方が管理はしやすくなると思います。
kumo_001

2022/09/13 01:12

すみません、外出しの言葉の意味が理解できていませんでした、仰る通りです。 本来DBに入れるようなデータを全て配列で管理しているので、 DBの使い方が理解できるようになったときはDBで管理したいと思います。
m.ts10806

2022/09/13 01:32

表現が伝わりづらくて申し訳なかったです。 外に出す=ハードコーディングしない(ロジック内に直に書かない)と考えてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問