PHP: Групиращ масив в цикъл for-each

Имам масив като този:

array(2) {
  ["currency"]=>
    string(7) "bitcoin"
  ["Totalcs"]=>
   string(1) "1"
}
array(2) {
  ["currency"]=>
    string(8) "ethereum"
  ["Totalcs"]=>
   string(1) "1"
}
array(2) {
  ["currency"]=>
    string(8) "ethereum"
  ["Totalcs"]=>
   string(1) "1"
}

Искам да групирам този масив по следния начин:

array(2) {
 ["currency"]=>
   string(7) "bitcoin"
 ["Totalcs"]=>
   string(1) "1"
}
array(2) {
 ["currency"]=>
   string(8) "ethereum"
 ["Totalcs"]=>
   string(1) "2"
 }

Опитах много начини, но не успях на никого ... моля, помогнете ми


person Vishnu Gopinath    schedule 16.02.2018    source източник
comment
опитайте array_unique($array, SORT_REGULAR); за повече посетете php.net/language.operators.array   -  person Sanjit Bhardwaj    schedule 16.02.2018
comment
Моля, споделете опит за код, поне един.   -  person u_mulder    schedule 16.02.2018
comment
Беше наистина неясно, докато не забелязах, че увеличавате броя ...... както sanjit посочи уникален масив за опити.   -  person Alice    schedule 16.02.2018
comment
Алис,, да......   -  person Vishnu Gopinath    schedule 16.02.2018
comment
@Irfan това е неподходяща връзка за подвеждане. Там няма никакво сумиране. Вероятно 100 други/по-добри връзки за намиране.   -  person mickmackusa    schedule 16.02.2018
comment
@mickmackusa, предполагам група по функционалност в масива, затова бях маркиран, може да е грешно..   -  person er.irfankhan11    schedule 16.02.2018
comment
@VishnuGopinath промених решението си, така че, моля, погледнете текущото редактирано решение (I HAVE USED isset() INSIDE foreach())   -  person Anant Kumar Singh    schedule 16.02.2018


Отговори (2)


Обикновено foreach() със създаване на нов масив ще свърши работата: -

$final_array = [];

foreach($array as $arr){

  $final_array[$arr['currency']]['currency'] = $arr['currency'];
  $final_array[$arr['currency']]['Totalcs'] = (isset($final_array[$arr['currency']]['Totalcs']))? $final_array[$arr['currency']]['Totalcs']+$arr['Totalcs'] : $arr['Totalcs'];

}

$final_array = array_values($final_array);

print_r($final_array);

Изход:- https://eval.in/957322

person Anant Kumar Singh    schedule 16.02.2018

Ще трябва да зададете временни ключове, докато итерирате своя входен масив. Този метод няма да извършва ненужни презаписвания на стойности.

Код: (Демо)

$array=[
    ['currency'=>'bitcoin','Totalcs'=>'1'],
    ['currency'=>'ethereum','Totalcs'=>'1'],
    ['currency'=>'ethereum','Totalcs'=>'1']
];
foreach($array as $row){  // iterate all rows
    if(!isset($result[$row['currency']])){  // if first occurrence of currency...
        $result[$row['currency']]=$row;     // save the full row with currency as the temporary key
    }else{                                    // if not the first occurrence of currency...
        $result[$row['currency']]['Totalcs']+=$row['Totalcs'];  // add Totalcs value
    }
}
var_export(array_values($result));

Изход:

array (
  0 => 
  array (
    'currency' => 'bitcoin',
    'Totalcs' => '1',
  ),
  1 => 
  array (
    'currency' => 'ethereum',
    'Totalcs' => 2,
  ),
)
person mickmackusa    schedule 16.02.2018