私はこれを一日中研究しており、解決策を見いだせませんでした。私はまた、PHPには非常に新しいです。PHP foreachループは不要な配列を返す(Wikipedia API)
私の機能の目的は、Wikipediaの記事のユーザー入力(Category1)を取り、そのカテゴリを返すことです。以下の基本的な機能は問題なくこれを行います。
function get_all_categories () {
$url = $this->get_url ('categories') ;
$url .= 'titles='.urlencode($_POST['Category1']);
$url .= '&cllimit=500' ;
$data = $this->get_result ($url) ;
$array = json_decode($data, true); }
例都市計画のためになる:
Array
(
[batchcomplete] =>
[query] => Array
(
[pages] => Array
(
[46212943] => Array
(
[pageid] => 46212943
[ns] => 0
[title] => Urban planning
[categories] => Array
(
[0] => Array
(
[ns] => 14
[title] => Category:All Wikipedia articles written in American English
)
[1] => Array
(
[ns] => 14
[title] => Category:Commons category with local link same as on Wikidata
)
[2] => Array
(
[ns] => 14
[title] => Category:Pages using ISBN magic links
)
[3] => Array
(
[ns] => 14
[title] => Category:Urban planning
)
[4] => Array
(
[ns] => 14
[title] => Category:Use American English from April 2015
)
[5] => Array
(
[ns] => 14
[title] => Category:Use dmy dates from April 2015
)
[6] => Array
(
[ns] => 14
[title] => Category:Wikipedia articles needing clarification from June 2015
)
[7] => Array
(
[ns] => 14
[title] => Category:Wikipedia articles with GND identifiers
)
)
)
)
)
)
私はこの配列からタイトルのみ値を抽出しようとすると、私の問題が開始されます。私は、多次元配列見つかり最も簡単な解決策であるforeachループでこれを行うことを試みてきました:
$array1 = new RecursiveIteratorIterator(
new RecursiveArrayIterator($array),
RecursiveIteratorIterator::SELF_FIRST);
foreach ($array1 as $key => $value) {
if (is_array($value) && $key == 'categories') {
$result = array_map(function($element){return $element['title'];}, $value);
print_r($result);
}
}
は、私はこのコードを取得すると、2つの配列です。タイトルのみ(私が欲しかったもの)が、また、不要な配列(いつか最初のタイトルが含まれます)の端部に取り付けられ伴う一つの配列:
Array
(
[0] => Category:All Wikipedia articles written in American English
[1] => Category:Commons category with local link same as on Wikidata
[2] => Category:Pages using ISBN magic links
[3] => Category:Urban planning
[4] => Category:Use American English from April 2015
[5] => Category:Use dmy dates from April 2015
[6] => Category:Wikipedia articles needing clarification from June 2015
[7] => Category:Wikipedia articles with GND identifiers
)
Array
(
[ns] =>
[title] => C
)
は、この余分な配列が、私は理解していないものです。私は問題がforeachループによって引き起こされると思います。私はループの外で$変数を設定しないようにしましたが、それは助けになりませんでした。これらの結果を別の関数に渡そうとすると、特別な配列が特に面倒になります。これを防ぐ方法を教えてください。
完全に動作します。ありがとうございました! – Sabaghian