我有这个数组,我喜欢按照新名称和总和对得分进行分组。我有一个输入数组,看起来像:
Array
(
[0] => Array
(
[newname] => Horse
[score] => 4
)
[1] => Array
(
[newname] => Horse
[score] => 2
)
[2] => Array
(
[newname] => Snake
[score] => 3
)
[3] => Array
(
[newname] => Dog
[score] => 3
)
)
我需要输出数组来对每个newname的得分求和。所以这就是结果:
Array
(
[0] => Array
(
[newname] => Horse
[score] => 6
)
[1] => Array
(
[newname] => Snake
[score] => 3
)
[2] => Array
(
[newname] => Dog
[score] => 3
)
)
为此,我有以下php
$newArray = array();
foreach ($arrayAnimals as $row){
if(!isset($newArray[$row['newname']]['score'])){
$newArray[$row['newname']]['score'] =0;
}
$newArray[$row['newname']]['score'] += $row['score'];
}
但它只显示分数?
答案 0 :(得分:7)
你可以这样做
$newArray = array();
foreach ($arrayAnimals as $row){
$animal = $row['newname'];
if(!isset($newArray[$animal])){
$newArray[$animal]['newname'] = $animal;
$newArray[$animal]['score'] = 0;
}
$newArray[$animal]['score'] += $row['score'];
}
print_r(array_values($newArray));
答案 1 :(得分:2)
你可以循环:
$newArray = array();
foreach( $arr as $value ) {
//If newname does not exist, assign the value
if ( !isset( $newArray[ $value[ 'newname' ] ] ) ) $newArray[ $value[ 'newname' ] ] = $value;
//If newname exist, add the value
else $newArray[ $value[ 'newname' ] ][ 'score' ] += $value[ 'score' ];
}
//Convert an associative array to a simple array of its values...
$newArray = array_values( $newArray );
这将导致:
Array
(
[0] => Array
(
[newname] => Horse
[score] => 6
)
[1] => Array
(
[newname] => Snake
[score] => 3
)
[2] => Array
(
[newname] => Dog
[score] => 3
)
)
答案 2 :(得分:1)
<强>输入强>
$array = array(
array('newname' => 'Horse','score' => 4),
array('newname' => 'Horse','score' => 2),
array('newname' => 'Snake','score' => 3),
array('newname' => 'Dog','score' => 3)
);
<强>解决方案强>
$new = array();
foreach($array as $r){
//$r['newname'] contains name of animal. below condition check the current animal is in new array or not.
if(!isset($new[$r['newname']]))$new[$r['newname']] = $r;//if not. insert animal's array in new array
else $new[$r['newname']]['score'] = ($r['score']+$new[$r['newname']]['score']);// if yes, add the score of animal saved in new array to current score of that animal.
}
echo "<pre>";print_r($new); // show you the output.
<强>输出强>
Array
(
[Horse] => Array
(
[newname] => Horse
[score] => 6
)
[Snake] => Array
(
[newname] => Snake
[score] => 3
)
[Dog] => Array
(
[newname] => Dog
[score] => 3
)
)
答案 3 :(得分:0)
你也可以这样做:
$animalArray = array( array('newname' => 'Horse','score' => 4),
array('newname' => 'Horse','score' => 2),
array('newname' => 'Snake','score' => 3),
array('newname' => 'Dog','score' => 3),
array('newname' => 'Snake','score' => 7),
array('newname' => 'Snake','score' => 8),
array('newname' => 'Bat','score' => -1),
array('newname' => 'Dragon','score' => 70),
array('newname' => 'Bat','score' => 80)
);
$found = array(); // array to store each animals index
$counter = 0; // current index
foreach ($animalArray as $thisRow)
{
$animalName = $thisRow['newname'];
// if the animal has not yet been found, add it
if(!isset($found[$animalName]))
{
$newIndex = $counter; // current index
$found[$animalName] = array();
$found[$animalName]['index'] = $newIndex; // store the index for this animal
}
else
{
$index = $found[$animalName]['index']; // get the stored index
$animalArray[$index]['score'] += $thisRow['score']; // add current score
unset($animalArray[$counter]); // remove the duplicate
}
$counter++;
}
print_r($animalArray);
输出:
Array ( [0] => Array ( [newname] => Horse [score] => 6 )
[2] => Array ( [newname] => Snake [score] => 18 )
[3] => Array ( [newname] => Dog [score] => 3 )
[6] => Array ( [newname] => Bat [score] => 79 )
[7] => Array ( [newname] => Dragon [score] => 70 )
)