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

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

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

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

Q&A

解決済

2回答

725閲覧

配列の共通項を調べる

alitomo

総合スコア41

PHP

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

0グッド

0クリップ

投稿2021/11/30 05:58

編集2021/11/30 08:00

PHPにて、下記の条件で配列の共通項を調べるにはどのようにしたら良いでしょうか?

・配列は配列A、配列B、配列Cと3つある。
・ABCはどれも空を取りうる。
・空の配列は共通項の基準から省く。

※コメント内より実際のコードをこちらに記載いたします。
$result_and = array_intersect($re_area_results,$re_genre_results,$re_employment_results);
この処理の段階で
$re_area_results,
$re_genre_results,
$re_employment_results
のどれかが空の場合共通項が空になってしまうので、空の配列を省いてintersectを処理したいと思っています。

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

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

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

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

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

maisumakun

2021/11/30 06:01

どのようなコードを書いて、どこで詰まっているのですか?
m.ts10806

2021/11/30 06:05

回答依頼いただきましたが作業依頼には応えておりませんので。
alitomo

2021/11/30 08:12 編集

maisumakunさま、ご指摘ありがとうございます。 $result_and = array_intersect($re_area_results,$re_genre_results,$re_employment_results); この処理の段階で $re_area_results, $re_genre_results, $re_employment_results のどれかが空の場合共通項が空になってしまうので、空の配列を省いてintersectを処理したいと思っています。
m.ts10806

2021/11/30 06:23

質問は編集できます。 配列の例も出されたほうが良いです。
takasima20

2021/11/30 06:40

全部が空の場合や二つが空の場合はどうしますか?
alitomo

2021/11/30 08:02

m.ts10806さま、質問編集いたしました。ご指摘ありがとうございます。 takasima20さま、全部からの場合は空で問題ないのですが、2つ空の場合は残りの一つを返したいです。
guest

回答2

0

標準関数を駆使してできるだけシンプルに書いたら、このようなコードになるかと思います。

php

1array_intersect(...array_filter([$a, $b, $c]))

投稿2021/11/30 06:07

maisumakun

総合スコア145184

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

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

alitomo

2021/11/30 08:10 編集

ご回答ありがとうございます。 頂いた内容を試したところ、 $test_ar01 = array(1,21,3,4,5,6,7,8,2,10); $test_ar02 = array(); $test_ar03 = array(12,2,23,42,52,62,72,82,92,210); $test_ar04 = array_intersect(array_filter($test_ar01),array_filter($test_ar02),array_filter($test_ar03)); var_dump($test_ar04);echo "<br>"; で試したら array(0) { } になり、 $test_ar01 = array(1,21,3,4,5,6,7,8,2,10); $test_ar02 = array(); $test_ar03 = array(12,2,23,42,52,62,72,82,92,210); $test_ar04 = array_intersect(array_filter([$test_ar01, $test_ar02, $test_ar03])); で試したら Warning: array_intersect(): at least 2 parameters are required, 1 given in *** on line ** NULL となります。
maisumakun

2021/11/30 08:12

...が抜けています。 (なお、「3つのうち2つ以上が空配列」という状況には対応していませんでした)
guest

0

ベストアンサー

地道にやったらこんなかんじスかね

php

1$f1 = empty($re_area_results); 2$f2 = empty($re_genre_results); 3$f3 = empty($re_employment_results); 4$fn = $f1 + $f2 + $f3; 5$result_and = []; 6if ($fn < 2) { 7 $hoge = []; 8 if (!$f1) $hoge[] = $re_area_results; 9 if (!$f2) $hoge[] = $re_genre_results; 10 if (!$f3) $hoge[] = $re_employment_results; 11 $result_and = array_intersect(...$hoge); 12} else if ($fn == 2) { 13 if (!$f1) $result_and = $re_area_results; 14 if (!$f2) $result_and = $re_genre_results; 15 if (!$f3) $result_and = $re_employment_results; 16}

投稿2021/11/30 08:40

takasima20

総合スコア7458

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

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

alitomo

2021/11/30 09:11 編集

ありがとうございます。 頂いた内容をswitchに変更して問題なく動きました。 $test_ar01 = array(1,21,3,4,5,6,7,8,2,10); $test_ar02 = array(); $test_ar03 = array(12,2,23,42,52,62,72,82,92,210); $check = empty($test_ar01) + empty($test_ar02) + empty($test_ar03); switch ($check){ case 3: $result_and = array(); break; case 2: $result_and = array_filter([$test_ar01, $test_ar02, $test_ar03]); break; case 1: $result_and = array_intersect(...array_filter([$test_ar01, $test_ar02, $test_ar03])); break; default: $result_and = array_intersect($test_ar01, $test_ar02, $test_ar03); } var_dump($result_and);
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問