【问题标题】:Explode foreach to new array将 foreach 分解为新数组
【发布时间】: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 个键。如果我能首先整理出我不想要的钥匙,那将是完美的。那将解决我的问题。那我就不需要新数组了。

标签: php arrays json explode


【解决方案1】:

你让这件事变得比需要的困难得多。这只是一个循环:

$array = array();
foreach ($sections['sections'] as $article) {
    $array[] = $article['name'] . ' ' . $article['html_url'];
}

【讨论】:

  • 这是在数组中制作数组。我只想要一个数组,其中一个值为 ArticleName1 ArticleHTML1
  • 你少了一个分号 :) 我已经有了这个,但现在需要不同了。我在原始问题中添加了一些细节。
  • 好的,我已将其更改为使用串联而不是创建数组。但是您的代码随后会使用explode(),这会将其转回数组。为什么不一直把它作为一个数组保存呢?
  • 如果名称中有空格会怎样?
  • 想出了串联,如果名称有空格,效果很好,谢谢,在这里得到了很好的仔细检查。现在我需要去掉前四个键并“漂亮”地打印 4-16 中的键。然后我会将它们放入 HTML 列表中,一切就绪。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-24
  • 1970-01-01
  • 2011-08-17
  • 2020-12-18
  • 2010-11-20
  • 1970-01-01
相关资源
最近更新 更多