2 回答
![?](http://img1.sycdn.imooc.com/533e4d510001c2ad02000200-100-100.jpg)
TA贡献1827条经验 获得超8个赞
试试这个循环
//create new array to hold values in the format you need
$new_array = [];
//loop through old array
foreach($old_array as $arr) {
$artisan = $arr['artisan'];
$closeness = $arr['closeness'];
//check if `$artisan` key does not exists in `$new_array`
if(!array_key_exists($artisan, $new_array)) {
//create key in `$new_array` if it doesn't exist already
//for this key, create an array containing the values in the format you need
$new_array[$artisan] = [
'artisan' => $artisan,
'closeness' => $closeness
];
} else {
//increase closeness in `$new_array` with key `$artisan` if key did already exist
$new_array[$artisan]['closeness'] += $closeness;
}
}
//replace keys which contain `$artisan` with sequential numbers, as per your expected output.
//if you don't do this, it will still work, but your array keys will be equal to the artisan type.
$new_array = array_values($new_array);
print_r($new_array);
结果:
Array
(
[0] => Array
(
[artisan] => carpenter
[closeness] => 1.6
)
[1] => Array
(
[artisan] => brick layer
[closeness] => 1.3
)
[2] => Array
(
[artisan] => electrician
[closeness] => 0.9
)
)
如果删除该array_values()行,结果将如下所示:
Array
(
[carpenter] => Array
(
[artisan] => carpenter
[closeness] => 1.6
)
[brick layer] => Array
(
[artisan] => brick layer
[closeness] => 1.3
)
[electrician] => Array
(
[artisan] => electrician
[closeness] => 0.9
)
)
![?](http://img1.sycdn.imooc.com/54584e1f0001bec502200220-100-100.jpg)
TA贡献1877条经验 获得超1个赞
怎么样:
$results = array(); // create results array
foreach( $array as $k => $i ) {
$found = false;
foreach ( $results as $k => $r ) {
if ( $r[ "artisan" ] == $i[ "artisan" ] ) {
$results[ $k ][ "closeness" ] += $i[ "closeness" ];
$found = true;
break;
}
}
if ( ! $found ) array_push( $results, $i );
}
- 2 回答
- 0 关注
- 103 浏览
添加回答
举报