2017-10-02 14 views
-1

私はprint_r($list)という名前のPHP配列を持っています。PHPで選択されたキーを一意のIDで配列に配列

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) 

私はユーザーID等しいものとシェアを合計します。私の配列の出力は下になければなりません。

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; 

、以下の下のような文字列で値内で、この配列を使用したいですか?何か案が。ありがとうございました。

+0

はい:データベース内に。 – symcbean

+0

ループを別のループ内に作成することができます。最初のループでは、 'userid'と' share'の値をキャッチします。 2番目の方法では、 'userid'を比較し、それらが似ている場合は、別の配列を作成し、2つ前のものの合計を入れます。 – YaatSuka

答えて

1

ここでは、日付と画像が各ユーザー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 
     ) 

) 
+0

タイ人男性はうまく働いた.. – SwiftDeveloper

1

擬似コード:

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... 
} 

ずさんコード:

$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節などを広げたいですか?

1
$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 
関連する問題