php数组在数组中的值是否由特定键组成?

时间:2018-01-09 08:35:52

标签: php arrays

我有这个数组,我喜欢按照新名称和总和对得分进行分组。我有一个输入数组,看起来像:

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'];
}

但它只显示分数?

4 个答案:

答案 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 )
      )
相关问题