簡體   English   中英

PHP的總和與唯一ID數組選擇鍵

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM