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

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

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

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

Q&A

解決済

2回答

2303閲覧

【PHP】配列から共通の項目を抜き出す方法。

dokoniarukana

総合スコア31

PHP

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

0グッド

0クリップ

投稿2016/11/10 08:39

編集2016/11/13 02:25

初心者です。

県名と時間が出力された配列があります。
ここから

$arraymap = array_map(null,$ken,$time); var_dump($arraymap);

array(10) {
[0]=>array(2) {
[0]=> string(6) "北海道"
[1]=> string(13) "17:00~23:59"
}
[1]=> array(2) {
[0]=> string(4) "東京"
[1]=> string(13) "17:00~23:59"
}
[2]=>array(2) {
[0]=> string(4) "香川"
[1]=> string(13) "18:00~23:59"
}
[3]=>array(2) {
[0]=> string(4) "愛媛"
[1]=>string(13) "18:00~23:59"
}
[4]=>array(2) {
[0]=> string(4) "秋田"
[1]=> string(13) "18:00~23:59"
}
[5]=>array(2) {
[0]=> string(4) "栃木"
[1]=> string(13) "18:00~23:59"
}


こちらの県名だけ出されている配列と比較し、

$arraymerge = array_merge($ken, $ken2); var_dump($arraymerge);

[0]=>string(4) "東京"
[1]=>string(4) "千葉"
[2]=>string(4) "埼玉"
[3]=>string(4) "群馬"


県名だけが共通ならば
下記のように県名+その時間 をとりたいのですが、
array_intersectではエラーが出てしまいました。
このような項目の数が異なる配列ではどのように対処するのでしょうか。

[1]=> array(2) {
[0]=> string(4) "東京"
[1]=> string(13) "17:00~23:59"
追伸

$array1 = $arraymap; $array2 = $arraymerge; $margeArray = array(); foreach ($array1 as $key => $value) { $margeArray[$value[0].$value[1]] = $value; } foreach ($array2 as $key => $value) { $margeArray[$value[0].$value[1]] = $value; } var_dump($margeArray);

を試したところ、"東京" "17:00~23:59"だけでなく
$arraymapの配列が全てマージされた感じで出てきました。
キーの文字列を変えるとは具体的にどういうことでしょうか?

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

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

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

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

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

guest

回答2

0

ベストアンサー

php

1<?php 2$arraymap = array( 3 array('北海道', '17:00~23:59'), 4 array('東京', '17:00~23:59'), 5 array('香川', '18:00~23:59'), 6 array('愛媛', '18:00~23:59'), 7 array('秋田', '18:00~23:59'), 8 array('栃木', '18:00~23:59') 9); 10var_dump($arraymap); 11 12$arraymerge = array( 13 '東京', 14 '千葉', 15 '埼玉', 16 '群馬' 17); 18var_dump($arraymerge); 19 20$result = array(); 21foreach ($arraymap as $key => $value) { 22 if (in_array($value[0], $arraymerge, true)) { 23 $result[$key] = $value; 24 } 25} 26var_dump($result);

実行結果

array(6) { [0]=> array(2) { [0]=> string(9) "北海道" [1]=> string(13) "17:00~23:59" } [1]=> array(2) { [0]=> string(6) "東京" [1]=> string(13) "17:00~23:59" } [2]=> array(2) { [0]=> string(6) "香川" [1]=> string(13) "18:00~23:59" } [3]=> array(2) { [0]=> string(6) "愛媛" [1]=> string(13) "18:00~23:59" } [4]=> array(2) { [0]=> string(6) "秋田" [1]=> string(13) "18:00~23:59" } [5]=> array(2) { [0]=> string(6) "栃木" [1]=> string(13) "18:00~23:59" } } array(4) { [0]=> string(6) "東京" [1]=> string(6) "千葉" [2]=> string(6) "埼玉" [3]=> string(6) "群馬" } array(1) { [1]=> array(2) { [0]=> string(6) "東京" [1]=> string(13) "17:00~23:59" } }

投稿2016/11/10 08:57

KiyoshiMotoki

総合スコア4791

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

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

dokoniarukana

2016/11/10 10:02

サイトから県名と時間を抜き取っているので直接書くことはできません。
guest

0

array_intersectは多次元配列はできないと思いますよ。

自分の場合、重複の条件をキーにして詰め替えてしまいますね。
マージ対象がいっぱいある場合は汎用的な関数を作成して対応します。

PHP

1$array1 = ....; 2$array2 = ....; 3 4$margeArray = array(); 5foreach ($array1 as $key => $value) { 6 $margeArray[$value[0].$value[1]] = $value; 7} 8 9foreach ($array2 as $key => $value) { 10 $margeArray[$value[0].$value[1]] = $value; 11} 12var_dump($margeArray);

投稿2016/11/10 08:54

編集2016/11/10 10:26
himakuma

総合スコア952

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

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

dokoniarukana

2016/11/10 10:13

初歩的な質問で申し訳ないのですが、$array1 = ....;と$array2 = ....;に比較したい配列を入れ、 そこからvar_dumpで表示させるにはどこを入れるのでしょうか。
himakuma

2016/11/10 10:27

最後にvar_dumpを追加すれば表示できますよ。キーは文字列になっているので、それを変更したい場合はさらに配列を編集する必要があります。
dokoniarukana

2016/11/12 03:22

さらに配列を編集する とはどういうことでしょうか。 このままではうまく配列に出せないみたいです。
dokoniarukana

2016/11/12 04:19 編集

array(13) { ["香川09:30~20:00"]=> array(2) { [0]=> string(4) "香川" [1]=> string(13) "09:30~20:00" } ["愛媛09:30~20:00"]=> array(2) { [0]=> string(4) "愛媛" [1]=> string(13) "09:30~20:00" } ["秋田15:00~23:59"]=> array(2) { [0]=> string(4) "秋田" [1]=> string(13) "15:00~23:59" } ["熊本16:00~23:59"]=> array(2) { [0]=> string(4) "熊本" [1]=> string(13) "16:00~23:59" } ["滋賀17:00~22:00"]=> array(2) { [0]=> string(4) "滋賀" [1]=> string(13) "17:00~22:00"
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問