【发布时间】:2017-01-05 05:45:07
【问题描述】:
我一直在研究这个问题,但没有找到任何解决方案。我对php也很陌生。
我的函数的目的是获取维基百科文章的用户输入(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);
}
}
我用这段代码得到的是两个数组。一个只有标题的数组(我想要的),还有一个不需要的数组(有时包括第一个标题)附加到末尾:
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 循环引起的。我尝试在循环之外取消设置 $variable ,但没有帮助。如果我尝试将这些结果传递给另一个函数,额外的数组会变得特别麻烦。我怎样才能防止这种情况发生?
【问题讨论】:
标签: php arrays foreach wikipedia-api