【发布时间】:2017-02-23 22:34:45
【问题描述】:
我有类似这样的 JSON API 响应
Array
(
[sections] => Array
(
[0] => Array
(
[id] => 115000089967
[url] => xxxxx
[html_url] => ArticleHTML1
[category_id] => 204458828
[position] => 0
[sorting] => manual
[created_at] => 2016-12-19T14:56:23Z
[updated_at] => 2017-02-03T08:23:04Z
[name] => ArticleName1
[description] =>
[outdated] =>
)
[1] => Array
(
[id] => 207077828
[url] => xxxxxx
[html_url] => ArticleHTML2
[category_id] => 204458828
[position] => 1
[sorting] => manual
[created_at] => 2016-11-14T09:28:30Z
[updated_at] => 2017-02-02T09:15:42Z
[name] => ArticleName2
[description] =>
[outdated] =>
)
)
[page] => 1
[per_page] => 30
[page_count] => 1
[sort_by] => position
[sort_order] => asc
)
我已经成功地用foreach迭代了这个,所以返回看起来像这样:
ArticleName1 文章HTML1
ArticleName2 文章HTML2
所以我像这样从每一个中提取 [name] 和 [html_url]:
$details1 = array('name');
$details2 = array('html_url');
foreach($sections['sections'] as $article) {
foreach($details1 as $detail) {
echo "$article[$detail] ";
}
foreach($details2 as $detail) {
echo "$article[$detail]\n";
}
}
但我接下来想要的是,该响应应该分解为一个这样的数组:
Array
(
[0] => ArticleName1 ArticleHTML1
[1] => ArticleName2 ArticleHTML2
)
我已经设法将它们分解为单个数组:
foreach($sections['sections'] as $article) {
foreach($details1 as $detail) {
$name = "$article[$detail] ";
}
foreach($details2 as $detail) {
$url = "$article[$detail]\n";
}
$string = $name . $url;
$array = explode(' ', $string, 1);
print_r($array);
}
但我只需要一个数组。
怎么样?我迷路了或只是不明白,我什至接近了吗?
编辑
这里的问题是 JSON 转储非常大,我只需要很少的东西(名称和 url)。所以我想我首先抓住整个东西,然后我只取名字和网址(就像第一个 foreach 正在做的那样),然后把它们放回数组。因为从这些名称和 url 中我只需要最后 12 个键,并且从单个数组中获取它们会很容易。
如果我能首先整理出我不想要的钥匙,那将是完美的。那将解决我的问题。然后我就不需要新数组等了。
【问题讨论】:
-
我不明白你为什么合并然后立即爆炸
$string?此外,您使用 foreach 的方式也存在很大缺陷 -$name和$url只会是最后一个等等。 -
是的。这里的问题是 JSON 转储非常大,我只需要很少的东西(名称和 url)。所以我在想我先把整个东西都抓起来,然后把那些我想要的东西整理出来,然后把它们放在一起。因为从那些我只需要最后 12 个键。如果我能首先整理出我不想要的钥匙,那将是完美的。那将解决我的问题。那我就不需要新数组了。