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

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

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

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

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

Q&A

解決済

3回答

1965閲覧

連想配列から値を取り出せない

nekora

総合スコア501

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

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

0グッド

1クリップ

投稿2020/01/08 22:08

編集2020/01/09 01:15

前提・実現したいこと

wordpressでphpをつかって連想配列からキーを値に変換しようとしています。
しかし、キーと値がどちらも日本語で同じ値となっています。使用エンコードはUTF-8です

キーから値を取り出そうとしたら値が取り出せませんでした。

該当のソースコード

php

1$array = array( 2 'i'=>'い', 3 'う'=>'う', 4 'e'=>'え' 5);

試したこと

このとき、キーを'う'で値を得ようとしたら値が取り出せませんでした。
i,eは問題なく値を取り出せました。

キーと値が同じだと取り出せないのでしょうか?

当方が何かミスをしているのでしょうか?
どなたか分かる方ご教授お願いします。

ご指摘によりソースコードを公開します。実際には文字列が違いますが守秘義務のためです。ロジックは変更ありません。

とあるサイトで交通経路の大項目と小項目をURLから日本語に組み立ててTITLEタグに埋めこむPHPです。

ただどういうわけか、一部の項目が日本語のままURLに出てきます。修正が膨大になるためやむおえず、そのまま組み立てていますが
これが値が取れずemptyになります。

問題が出るURL
https://www.foobaa.com/small_category/自転車/
https://www.foobaa.com/large_category/airplane+taxi/?small_category=徒歩

呼び出し元

header.php

<title><?php custum_wp_title();?></title>

ソースコード

php

1<?php 2// $sep セパレータ文字列 規定値は全角スペース 3// $display タイトルを表示する(true)か、PHP 文字列として使えるようにタイトルの値を返す(false)か。規定値はtrue 4// $suffix タイトルの末尾に追加する文字列 規定値はNULLで追加文字列無し 5function custum_wp_title($sep=" ", $display=true, $suffix="") { 6 $category_array = [ 7 "car"=>"車", 8 "buss"=>"バス", 9 "airplane"=>"飛行機", 10 "taxi"=>"タクシー", 11 "super-express"=>"新幹線", 12 "train"=>"在来線", 13 "express"=>"特急", 14 "自転車"=>"自転車", 15 "徒歩"=>"徒歩", 16 "スケボー"=>"スケボー" 17 ]; 18 19// echo (empty($_SERVER['HTTPS']) ? 'http://' : 'https://').$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; 20// echo $_SERVER['REQUEST_URI']; 21 $uri_array = explode('/', $_SERVER['REQUEST_URI']); 22// var_dump($uri_array); 23 if ( !( in_array('large_category', $uri_array) || in_array('small_category', $uri_array) ) ) { 24 wp_title( '|', true, 'right' );bloginfo( 'name' ); 25 return; 26 } 27 28 if (in_array('large_category', $uri_array)) { 29 $array_index = array_search('large_category', $uri_array); 30 $large_categories = explode('+', $uri_array[$array_index+1]); 31 $echo_string =""; 32 foreach ($large_categories as $value) { 33 $echo_string .= $category_array[$value] . $sep; 34 } 35 } elseif (in_array('small_category', $uri_array)) { 36 $array_index = array_search('small_category', $uri_array); 37 $large_categories = explode('/', $uri_array[$array_index+1]); 38 $echo_string =""; 39 foreach ($large_categories as $value) { 40 $echo_string .= $category_array[$value] . $sep; 41 } 42 } 43 44 if (!empty( $_SERVER['QUERY_STRING']) ) { 45 $query_array = explode('=', $_SERVER['QUERY_STRING']); 46 $query_index = array_search('small_category', $query_array); 47 $echo_string .= $category_array[$query_array[$query_index+1]]; 48 $echo_string .= $sep; 49 } 50 51 if( !empty($suffix) ) { 52 $echo_string .= $suffix; 53 } 54 55 if ($display) { 56 echo $echo_string; 57 } else { 58 return $echo_string; 59 } 60} 61?>

よろしくお願いします。

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

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

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

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

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

m.ts10806

2020/01/08 22:19

ミスしてるかどうかは取り出そうとしているコードを提示されないと誰も判断できません。 また「取り出せない」では起きている現象が分かりません。何が起きたのでしょうか。 エラー等起きているのでしたらそのエラーメッセージもそのままご提示ください(場合によりエラーログを確認してください)
nekora

2020/01/08 22:40

顧客のサーバー上での修正依頼だったのですがエラーログの閲覧許可がでていないので、そちらはご用意できませんが、ソースコードの方は提示できると思います。出社したら、提示させていただきます。 アドバイスありがとうございました。
guest

回答3

0

自己解決

自己解決できました。

もしやと思い、連想配列を見に行く直前にキーをechoしてみたところ
chromeのurl欄には日本語になっているのにphpで$_SERVER['REQUEST_URI']で取得した時に
日本語がURL(%エンコード)エンコードされて格納されていました。

じゃぁ%エンコードでいいのねってことで、とあるサイトで日本語を%エンコードに変換してくれるところで変換して実行したら。なぜか取れませんでした。よくよく見てみると先のサイトではエンコードの際に
アルファベットは大文字だったのに対しWordpressのphpはアルファベットは小文字でした。

そこで%エンコードでアルファベットを小文字でキー値にしたら、無事、値を拾ってきてくれました。

2つの落とし穴があったとは思いませんでした。
レスをつけて下さった方々、ありがとうございました。m(_ _)m

投稿2020/01/10 10:05

nekora

総合スコア501

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

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

nekora

2020/01/16 21:31

書き忘れてました。フェイルセーフとして、%エンコードの大文字版、小文字版の両方をそれぞれキーにして値を設定し、環境のブレがあっても拾ってこれるようにしてあります。
guest

0

キーと値が同じだと取り出せないのでしょうか?

いいえ、そういう制約は特にありません。何かミスをしているはずです。
(「取り出せない」と判断した詳細について記述いただけると幸いです)

https://3v4l.org/

↑こちらで再現できるかどうか試してみてください

投稿2020/01/08 22:17

編集2020/01/08 22:18
mpyw

総合スコア5223

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

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

nekora

2020/01/08 22:20

こんな朝早くに回答ありがとうございます。 教えていただいたサイトを今日出社したら試そうと思います。 結果が分かり次第レスつけます。 朝早くありがとうございましたm(_ _)m
guest

0

キーに日本語を使うと環境によってブレるので
可能な限り英数字のみ(一部シングルバイト文字もOK)で構成してください

投稿2020/01/09 00:27

yambejp

総合スコア114572

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問