[英]php sum selected keys in array with unique id
我有一個名為print_r($list)
php數組,您可以在下面看到輸出;
Array (
[userid] => 1042
[picture] => 7a86b24.jpg
[share] => 6
[sharedate] => 2017-10-02 )
Array (
[userid] => 1042
[picture] => 7a86b24.jpg
[share] => 1
[sharedate] => 2017-10-02 )
Array (
[userid] => 1042
[picture] => 7a86b24.jpg
[share] => 56
[sharedate] => 2017-10-02 )
Array (
[userid] => 1007
[picture] => 3a83a6d.jpg
[share] => 136
[sharedate] => 2017-10-02 )
Array (
[userid] => 1007
[picture] => 3a83a6d.jpg
[share] => 18
[sharedate] => 2017-10-02 )
Array (
[userid] => 1007
[picture] => 3a83a6d.jpg
[share] => 5
[sharedate] => 2017-10-02 )
我想將與userid相等的份額相加。 我的數組輸出必須在下面。
Array (
[userid] => 1042
[picture] => 7a86b24.jpg
[share] => 63
[sharedate] => 2017-10-02 )
Array (
[userid] => 1007
[picture] => 3a83a6d.jpg
[share] => 159
[sharedate] => 2017-10-02 )
我也想在帶有下面的字符串的值中使用此數組,
echo $userid;
echo $picture;
echo $share;
echo $sharedate;
我該怎么做 ? 任何想法。 謝謝。
偽代碼:
make a new empty array
iterate through the existing array {
for every userid:
exists in new array (check userid against index in new array)?
yes: get share from new array and update sharecount by adding the new one to the existing one
no: add to new array, with the userid as index...
}
code草的代碼:
$newArray = [];
foreach ($oldArray as $value) {
$userid=$value[0];
if (array_key_exists($userid, $newArray)){
$objectToUpdate=$newArray['userid'];
$objectToUpdate=array('userid'=>$value[0],'picture'=>$value[1],'share'=>$objectToUpdate[2]+$value[2],'sharedate'=>$value[3]);
} else {
$newArray[$userid]= array('userid'=>$value[0],'picture'=>$value[1],'share'=>$value[2],'sharedate'=>$value[3]);
}
}
或多或少的東西...它將幫助您入門
注意事項:假設每個用戶ID的日期和圖片都是相同的...如果不是,則必須仔細檢查如何在新數組中查看它並擴大if子句等。
這里考慮的日期和圖片對於每個用戶ID都是相同的。
// define an empty array
$new_array = array();
// loop the array
foreach($list as $value){
$new_array[$value['userid']]['userid'] = $value['userid'];
$new_array[$value['userid']]['picture'] = $value['picture'];
// add the share values for each user
$new_array[$value['userid']]['share'] = (isset($new_array[$value['userid']]['share'])) ? $new_array[$value['userid']]['share']+$value['share'] : $value['share'];
$new_array[$value['userid']]['sharedate'] = $value['sharedate'];
}
print_r($new_array);
重置鍵使用array_values($ new_array);
輸出:
Array
(
[1042] => Array
(
[userid] => 1042
[picture] => 7a86b24.jpg
[share] => 63
[sharedate] => 2017-10-02
)
[1007] => Array
(
[userid] => 1007
[picture] => 3a83a6d.jpg
[share] => 159
[sharedate] => 2017-10-02
)
)
$list = [/*your input array*/];
$intermediate = array_reduce($list, function($carry, $item) {
$userid = $item['userid'];
if(!isset($carry[$userid])) {
$carry[$userid] = $item;
} else {
$carry[$userid]['share'] += $item['share'];
}
return $carry;
});
/* here we have
Array (
[userid] => 1042
[picture] => 7a86b24.jpg
[share] => 63
[sharedate] => 2017-10-02 )
Array (
[userid] => 1007
[picture] => 3a83a6d.jpg
[share] => 159
[sharedate] => 2017-10-02 )
*/
foreach ($intermediate as $value) {
extract($value);
// here we have needed variables
echo $userid;
echo PHP_EOL;
echo $picture;
echo PHP_EOL;
echo $share;
echo PHP_EOL;
echo $sharedate;
echo PHP_EOL;
}
結果:
1042
7a86b24.jpg
63
2017-10-02
1007
3a83a6d.jpg
159
2017-10-02
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.