【问题标题】:Group array values by string in key? [closed]按键中的字符串对数组值进行分组? [关闭]
【发布时间】:2015-08-06 10:14:27
【问题描述】:

好的,给定这个数据结构:

array(
         'name one' => 'fred',
         'desc one' => 'lorem ipsum'
         'name two' => 'charles',
         'desc two' => 'lorem ipsum'
);

在 php 中,我如何匹配分配给键 ONE 或 TWO 的数值并返回:

array(
           'one' => array('name' => 'fred', 'desc' => 'lorem ipsum'),
           'two' => array('name' => 'charles' , 'desc => 'lorem ipsum')
);

【问题讨论】:

  • 你试过了吗?
  • 这怎么没有“明确的问题陈述”,因为我有 X 我想要 Y?是不是不够清楚@Rizier123
  • 很清楚,但没有显示出您的任何努力。你只是要求代码。

标签: php arrays regex


【解决方案1】:

这是一个直截了当的逻辑问题,你就是这样做的(我确信有更快的替代方案,但这正是你所需要的 ):

$new = array();
foreach($array as $key => $val) {
    list($item, $number) = explode(' ', $key);
    $new[$number][$item] = $val;
}

我们在上面的示例中使用list()explode() 来获取所需的变量。即数字“一”或“二”和项目名称,本质上是“名称”和“描述”。

Example


编辑

正如 Lajos 所说,如果未设置 $new[$number],此版本将对其进行排序并创建所需的数组:

$new = array();
foreach($array as $key => $val) {
    list($item, $number) = explode(' ', $key);
    // if the array isn't set
    if(!isset($new[$number])) $new[$number] = array();
    $new[$number][$item] = $val;
}

Example

【讨论】:

  • 如果 $new[$number] 没有设置会怎样?
  • 谢谢!我实际上还没有尝试过任何东西,但我想知道在尝试我自己的拙劣方式之前是否有一种优雅的方式来做到这一点。但是看着答案,我认为我的想法很完美!谢谢
  • @vimes1984 我的快乐伙伴 :)
  • 谢谢!那么哪一个顶接受???
  • @vimes1984 哪个答案最适合您的需求!
【解决方案2】:

类似这样的:

$target = array();
foreach ($elements as $k => $v) {
    $keys = explode(" ", $k);
    if (!isset($target[$keys[1]])) {
        $target[$keys[1]] = array();
    }
    $target[$keys[1]][$keys[0]] = $v;
}

【讨论】:

  • 你让我投赞成票,因为这就是我最初的做法!
猜你喜欢
  • 1970-01-01
  • 2016-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-05
  • 2014-10-28
  • 1970-01-01
  • 2021-02-14
相关资源
最近更新 更多