Skip to content

Instantly share code, notes, and snippets.

@devmsh
Created June 15, 2017 11:50
Show Gist options
  • Save devmsh/f22f538ffc5ab9824ae91d4dbbe13aa5 to your computer and use it in GitHub Desktop.
Save devmsh/f22f538ffc5ab9824ae91d4dbbe13aa5 to your computer and use it in GitHub Desktop.
array_assoc
<?php
/**
* Go from $scores to $result without using any loops!
*/
$scores = [
["player_id" => 3, "name" => "player #1", "score" => 150, "bonus" => 200],
["player_id" => 4, "name" => "player #2", "score" => 120, "bonus" => 100],
];
$result = collect([
3 => ["name" => "player #1", "score" => 350],
4 => ["name" => "player #2", "score" => 220],
]);
function array_assoc($callback, $value)
{
return array_reduce(array_map($callback, $value), function($assoc, $row)
{
[$key, $value] = $row;
$assoc[$key] = $value;
return $assoc;
}, []);
}
$result = array_assoc(function ($data) {
return [$data["player_id"], [
"name" => $data["name"],
"score" => $data["score"] + $data["bonus"],
]];
}, $scores);
@EngKhaledB
Copy link

<?php
$scores = [
    ['player_id' => 3, 'name' => 'player #1', 'score' => 150, 'bonus' => 200],
    ['player_id' => 4, 'name' => 'player #2', 'score' => 120, 'bonus' => 100],
];

$result = array_map(function ($item) {
    return ['name' => $item['name'], 'score' => $item['score'] + $item['bonus']];
}, array_column($scores, null, 'player_id'));

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment