【问题标题】:Concatenate array values based on same keys基于相同的键连接数组值
【发布时间】:2014-08-19 16:11:27
【问题描述】:

延伸到我的最后一个问题,我有一个如下所示的数组:

 Array
(
    [0] => Array
        (
            [id] => 1
            [uid] => 746
            [lid] => 748
        )

   [1] => Array
        (
            [id] => 6
            [uid] => 746
            [lid] => 744
        )

   [2] => Array
        (
            [id] => 11
            [uid] => 749
            [lid] => 743
        )


)

我现在想要的是将值与应输出为的相同 uid 合并:

 Array
(
    [0] => Array
        (
            [id] => 1,6
            [uid] => 746
            [lid] => 748,744
        )

   [1] => Array
        (
            [id] => 11
            [uid] => 749
            [lid] => 743
        )


)

有可能吗?不知道有没有什么功能。

【问题讨论】:

  • 没有准备好的功能。使用循环或 array_walk

标签: php arrays merge associative-array


【解决方案1】:

如果您要将其插入数据库中,请不要使用this,因为从长远来看,这会影响您。无论如何,没有内置函数可以做到这一点。你只需要一个简单的 foreach 循环。考虑这个例子:

$new_values = array();
$values = array(
    array('id'=> 1, 'uid' => 746, 'lid' => 748),
    array('id'=> 6, 'uid' => 746, 'lid' => 744),
    array('id'=> 11, 'uid' => 749, 'lid' => 743),
);

foreach($values as $value) {
    if(isset($new_values[$value['uid']])) {
        $temp = $new_values[$value['uid']];
        $temp['id'] .= ',' . $value['id'];
        $temp['lid'] .= ',' . $value['lid'];
        $new_values[$value['uid']] = $temp;
    } else {
        $new_values[$value['uid']] = $value;
    }
}

$new_values = array_values($new_values); // reindex keys

Sample Output

【讨论】:

  • 谢谢伙计。我没有将它插入数据库。更像是检索它,上面允许我为每个 uid 列出一行。
【解决方案2】:

我建议构建一个 uid-Array(假设你的数组在 $array 中):

$uid_array = array();
foreach($array as $key => $val) {
  $uid = $val["uid"];
  if(! isset($uid_array[$uid])) {
    $uid_array[$uid] = array();
  }
  if(! isset($uid_array[$uid]["id"])) {
    $uid_array[$uid]["id"] = $val["id"];
  } else {
    $uid_array[$uid]["id"].= ",".$val["id"];
  }
  if(! isset($uid_array[$uid]["lid"])) {
    $uid_array[$uid]["lid"] = $val["lid"];
  } else {
    $uid_array[$uid]["lid"].= ",".$val["lid"];
  }
}

【讨论】:

  • 谢谢伙计。我最后使用了凯文的解决方案。
【解决方案3】:

我不知道有什么功能可以为您提供所需的功能,但这会给您提供所需的功能:

function myArrayMerge($arr)
{
    $result = array();
    foreach($arr as $user_array)
    {
        $result[$user_array['uid']]['id'][$user_array['id']] = $user_array['id'];
        $result[$user_array['uid']]['lid'][$user_array['lid']] = $user_array['lid'];
    }

    $output = array();
    foreach($result as $uid => $result_array) {
        $output[] = array('id' => implode(',', $result_array['id']), 'uid' => $uid, 'lid' => implode(',', $result_array['lid']));
    }
    return $output;
}

【讨论】:

  • 谢谢伙计。我最后使用了凯文的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-28
  • 1970-01-01
  • 1970-01-01
  • 2020-11-09
  • 1970-01-01
  • 2020-11-06
  • 1970-01-01
相关资源
最近更新 更多