鍍金池/ 問答/PHP/ PHP 操作數(shù)組問題

PHP 操作數(shù)組問題

<?php
//////當(dāng)前查詢出來的數(shù)據(jù)
$redata = array(
    0=>['id'=>1,'name'=>'張三','age'=>22,'hobby'=>'學(xué)習(xí)'],
    1=>['id'=>1,'name'=>'張三','age'=>22,'hobby'=>'騎行'],
    2=>['id'=>2,'name'=>'李四','age'=>20,'hobby'=>'旅游'],
);

//怎么樣才能轉(zhuǎn)換成下面這種形式的?  寫了一上午 愣是沒寫出來
$arr = array(
    0=>[
        'id'=>1,'name'=>'張三','age'=>22,'hobby'=> ['學(xué)習(xí)', '騎行']
    ],
    1=>[
        'id'=>2,'name'=>'李四','age'=>20,'hobby'=> ['旅游']
    ]
);

回答
編輯回答
痞性

clipboard.png

clipboard.png
代碼
`
$redata = array(

0=>['id'=>1,'name'=>'張三','age'=>22,'hobby'=>'學(xué)習(xí)'],
1=>['id'=>1,'name'=>'張三','age'=>22,'hobby'=>'騎行'],
2=>['id'=>2,'name'=>'李四','age'=>20,'hobby'=>'旅游'],

);

function hebing($redata){

foreach ($redata as $k => $v) {
    if($redata[$k]['id']==$redata[$k+1]['id']){
        $redata[$k+1]['hobby'] = [$redata[$k]['hobby'],$redata[$k+1]['hobby']];
        array_splice($redata, $k, 1);
    }
}
return $redata;

}
var_dump(hebing($redata));
`

2017年4月29日 10:02
編輯回答
夕顏

一個foreach還是好理解吧.

function hobby_merge($redata)
{
    $result = [];
    foreach($redata as $item) {
        if (!isset($result[$item['id']])) {
            $item['hobby'] = (array) $item['hobby'];
            $result[$item['id']] = $item;
            continue;
        }
        $result[$item['id']]['hobby'][] = $item['hobby'];
    }
    return array_values($result);
}
2018年5月16日 01:07
編輯回答
不舍棄
$arr = [];
foreach($redata as $k=>$row){
    foreach($row as $key => $item){
        if($key === 'hobby'){
            $arr[$row['id']][$key][] = $item; 
        }else{
            $arr[$row['id']][$key] = $item; 
        }
        
        
    }
}

var_dump($arr);
2017年2月5日 06:13
編輯回答
笑忘初
$arr = [];
foreach($redata as $v){
    $arr[$v['id']]['id'] = $v['id'];
    $arr[$v['id']]['name'] = $v['name'];
    $arr[$v['id']]['age'] = $v['age'];
    $arr[$v['id']]['hobby'][] = $v['hobby'];
}
$idMap = array_column($arr,'id');
array_multisort($arr,SORT_ASC,$idMap);
var_dump($arr);

數(shù)組字段是固定的話 省去 if 判斷的時間

2017年7月9日 01:01
編輯回答
膽怯
$redata = array(
  0 => ['id' => 1, 'name' => '張三', 'age' => 22, 'hobby' => '學(xué)習(xí)'],
  1 => ['id' => 1, 'name' => '張三', 'age' => 22, 'hobby' => '騎行'],
  2 => ['id' => 2, 'name' => '李四', 'age' => 20, 'hobby' => '旅游'],
);

$result = array_reduce($redata, function ($arr, $item) {
  $key = array_search($item['id'], array_column($arr, 'id'));
  if ($key === false) {
    $item['hobby'] = [$item['hobby']];
    $arr[] = $item;
  } else {
    $arr[$key]['hobby'][] = $item['hobby'];
  }
  return $arr;
}, []);

var_dump($result);
2017年8月19日 15:26