1

Language is PHP.

So I want to turn a multidimensional array into a simple associative array that uses every second value as a key and every third value as a value to that key.

The initial array looks like this:

Array
(
[0] => Array
    (
        [id] => 1
        [name] => Adam
        [value] => 150
    ),

[1] => Array
    (
        [id] => 2
        [name] => Bob
        [value] => 120
    ),

[2] => Array
    (
        [id] => 3
        [name] => Charlie
        [value] => 175
    )

)

I want to turn it into a simple associative array that looks like this:

Array
(
Adam => 150,
Bob => 120,
Charlie => 175
)

I tried (and failed with) something like this:

$initialArray;
$arrayPrepped = array();
    foreach ($initialArray as $part) {
        foreach ($part as $name => $value) {
            if ($name == 'name') {
                $key = $value;
            } elseif ($name == 'value') {
                $finalvalue = $value;
            }
            $finalpart = array($key => $finalvalue);
        }
        array_merge($initialArray, $finalpart);
    }
P.Pal
  • 63
  • 9
  • 2
    `$arrayPrepped = array_column($initialArray, 'value', 'name');` – Mark Baker Mar 20 '17 at 19:31
  • 2
    Just keep in mind when you do this that if there are any entries that happen to have the same `name`, the `value` of that key will be overwritten and you'll only get the last one. – Don't Panic Mar 20 '17 at 19:44

3 Answers3

5

What about this one-liner!

print_r(array_column($initialArray, 'value', 'name'));

Read up on array_column.

AbraCadaver
  • 78,200
  • 7
  • 66
  • 87
meda
  • 45,103
  • 14
  • 92
  • 122
2

Your original value looks like:

$a = Array
(
    Array(
        'id' => 1,
        'name' => 'Adam',
        'value' => 150
    ),
    Array
    (
        'id' => 1,
        'name' => 'Job',
        'value' => 200
    ),

);

Then work on:

$myarr = [];
foreach ($a as $item) {
    $myarr[$item['name']] = $item['value'];
}
echo "<pre>";
print_r($myarr);

output:

Array
(
    [Adam] => 150
    [Job] => 200
)
Md. Abutaleb
  • 1,590
  • 1
  • 14
  • 24
0

You can go through array and setup value into new array in that way.

$initialArray = [
    0 => [
        'id'    => 1,
        'name'  => 'Adam',
        'value' => 150,
    ],

    1 => [
        'id'    => 2,
        'name'  => 'Bob',
        'value' => 120,
    ],

    2 => [
        'id'    => 3,
        'name'  => 'Charlie',
        'value' => 175,
    ],
];
$arrayPrepped = array();
foreach ($initialArray as $part) {
    $arrayPrepped[$part['name']] = $part['value'];
}

Here is example of execution

Pavlo Zhukov
  • 3,007
  • 3
  • 26
  • 43