Редактирование нескольких значений массива (если они существуют) - PullRequest
0 голосов
/ 03 августа 2010

Ну, ребята, я боролся с этим уже около 5 часов, и я осознал, что мой мозг полон сил, подумав, что мне лучше найти людей, которые знают, что они делают: p Теперь мне просто нужно правильно объяснить проблему. *

Я хочу отобразить все бомбардиры с указанием только их имени и времени для каждой отдельной цели, например: Карлтон Диксон (23, 53) Даниэль Таскер (1).

Единственный способ, которым я мог бы подумать, это заменить массив новым, в котором есть все цели в элементе. Итак, сделаем один ряд для имен и один ряд со всеми целями в них. Может быть, я не смотрю на это правильно?

Приветствия, парни.

array(8) {   

    [0]=>   array(3) {  

         ["fname"]=>
         string(7) "Carlton"
         ["sname"]=>
         string(7) "Dickson"
         ["time"]=>
         string(2) "23"   
    }   

    [1]=>   array(3) {

         ["fname"]=>
         string(7) "Carlton"
         ["sname"]=>
         string(7) "Dickson"
         ["time"]=>
         string(2) "53"  
    }  

    [2]=>   array(3) {

         ["fname"]=>
         string(6) "Daniel"
         ["sname"]=>
         string(6) "Tasker"
         ["time"]=>
         string(1) "1"   
    }   

Ответы [ 2 ]

0 голосов
/ 03 августа 2010
$scorers = array();

foreach ($goals as $goal) {
    $name = "{$goal['fname']} {$goal['sname']}";
    $scorers[$name] = isset($scorers[$name]) ? "{$scorers[$name]}, {$goal['time']}" : $goal['time'];
}

foreach ($scorers as $scorer => $goals) {
    echo "$scorer ($goals)";
}

Предполагая, что у вас есть массив $goals, например:

$goals = array(
    array('fname' => 'Carlton', 'sname' => 'Dickson', 'time' => '23'),
    array('fname' => 'Carlton', 'sname' => 'Dickson', 'time' => '53'),
    array('fname' => 'Daniel',  'sname' => 'Tasker',  'time' => '1')
);
0 голосов
/ 03 августа 2010

Вы можете перестроить свой массив следующим образом:

$newArray = array();

foreach($array as $player) {
    $name = $player['fname'] . " " . $player["sname"];
    if(!array_key_exists($name, $newArray)) {
        $newArray[$name] = array();
    }
    $newArray[$name][] = $player['time'];
}

Полученный массив будет:

Array
(
    [Carlton Dickson] => Array
        (
            [0] => 23
            [1] => 53
        )

    [Daniel Tasker] => Array
        (
            [0] => 1
        )

)

т.е. ключ - это имя, а значение - массив целей. Конечно, вы также можете объединить цели в виде строки, это зависит от того, что еще вы хотите сделать с данными.

Тогда печать - это просто просмотр массива:

foreach($newArray as $player => $goals) {
    echo $player . " (" . implode(',', $goals) . ") <br />"; // or PHP_EOL
}
...