【问题标题】:PHP: How to manipulate this array as CPU extensive as possiblePHP:如何尽可能多地操作这个数组
【发布时间】:2012-02-09 08:07:06
【问题描述】:

我正在开发一个供内部使用的 API,我的 SQL 查询将结果作为数组返回给我。现在我需要正确格式化的某个部分(坐标),但我不明白。

我尝试了不同的 for 循环和诸如 array_splice 之类的东西,但我总是几乎到了那里。另一件事是,我将在所有结果上运行它,所以我需要一个性能良好的解决方案。看看这些例子,我很感谢你的帮助。

我需要从这个数组中获取:

array (
  0 => array (
    'id' => '3',
    'name' => 'Stadthalle',
    'description' => 'Die Wiener Stadthalle',
    'created_at' => '2012-01-07 14:22:06',
    'coordinates' => '48.201187:16.334213, 48.200665:16.331606, 48.202989:16.331091, 48.203075:16.334192',
    'media' => 'image:http://farm5.staticflickr.com/4069/4679448909_1264ea4668_b.jpg,video:http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4',
  ),
  1 => array (
    'id' => '4',
    'name' => 'Schloss Schönbrunn',
    'description' => 'Schloss Schönbrunn, die ehemalige Sommerresidenz der Kaiserfamilie, zählt zu den schönsten Barockanlagen Europas.',
    'created_at' => '2012-01-10 01:06:48',
    'coordinates' => '48.201187:16.334213, 48.200665:16.331606, 48.202989:16.331091, 48.203075:16.334192',
    'media' => 'image:http://farm5.staticflickr.com/4069/4679448909_1264ea4668_b.jpg,video:http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4',
  ),
)

到这个数组:

 array (
      0 => array (
        'id' => '3',
        'name' => 'Stadthalle',
        'description' => 'Die Wiener Stadthalle',
        'created_at' => '2012-01-07 14:22:06',
        'coordinates' => array(
            array('48.201187:16.334213'),
            array('48.200665:16.331606'),
            array('48.202989:16.331091'),
            array('48.203075:16.334192')
        ),
        'media' => 'image:http://farm5.staticflickr.com/4069/4679448909_1264ea4668_b.jpg,video:http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4',
      ),
      1 => array (
        'id' => '4',
        'name' => 'Schloss Schönbrunn',
        'description' => 'Schloss Schönbrunn, die ehemalige Sommerresidenz der Kaiserfamilie, zählt zu den schönsten Barockanlagen Europas.',
        'created_at' => '2012-01-10 01:06:48',
        'coordinates' => array(
            array('48.201187:16.334213'),
            array('48.200665:16.331606'),
            array('48.202989:16.331091'),
            array('48.203075:16.334192')
        ),
        'media' => 'image:http://farm5.staticflickr.com/4069/4679448909_1264ea4668_b.jpg,video:http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4',
      ),
    )

【问题讨论】:

  • 你也应该尝试从这个数据:Schloss Schönbrunn到这个数据:Schloss Schönbrunn
  • 这将是 JSON 输出而不是 PHP,解码后将显示“Schönbrunn”。

标签: php arrays loops


【解决方案1】:

看起来很简单:

foreach($array as &$item) {
    $item['coordinates'] = explode(', ', $item['coordinates']);
}

See it in action.

这实际上并没有完全按照您显示的那样做,但是您可以将其更改为

$item['coordinates'] = array_map(function($el) { return array($el); },
                                 explode(', ', $item['coordinates']));

如果这真的是你想要的。

【讨论】:

    【解决方案2】:
    foreach ($outerArray as $key => &$value) {
        $coords = explode(',', $value['coordinates']);
        $value['coordinates'] = array();
        foreach ($coords as $coordPair) {
            $value['coordinates'][] = explode(':', $coordPair);
        }
    }
    

    【讨论】:

    • 这很好用,谢谢,我只需要切换第 2 行和第 3 行。你能告诉我“&”是做什么用的吗?或者给我一个我可以用谷歌搜索的关键字。谢谢!
    • 糟糕,你说得对。 &字符告诉 PHP 传递对数组中项目的引用,这样当我们在第 3 行和第 5 行更新它时,它会将更新返回到原始数组。谷歌“通过引用”。
    • 天哪,这就是我失败的地方。然后我尝试将它存储到 $temp 变量中并使用 array_push 重新创建数组。非常感谢!
    【解决方案3】:

    我假设你使用 mysql 但不幸的是 mysql 没有数组的概念。也许您可以使用 postgres,因为我相信它可以与数组一起使用。但似乎这个问题是重复的:How to SQL Select a one to many relation and merge the output

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-20
      • 1970-01-01
      • 1970-01-01
      • 2017-03-06
      • 1970-01-01
      • 2022-09-24
      • 2022-08-19
      相关资源
      最近更新 更多