Autor Zpráva
Enko
Profil
Ahoj,
mám následující pole
Array
(
    [0] => Array
        (
            [login] => login1
            [displayname] => jmeno1
            [manager] => manager1
            [date] => 2014-09-24 11:06:34
            [unit] => Array
                (
                    [0] => unit1
                )

        )

    [1] => Array
        (
            [login] => login2
            [displayname] => jmeno2
            [manager] => manager2
            [date] => 2014-09-24 11:06:34
            [unit] => Array
                (
                    [0] => unit2
                    [1] => unit3
                )

        )
   [2] => Array
        (
            [login] => login3
            [displayname] => jmeno3
            [manager] => manager2
            [date] => 2014-09-24 11:06:34
            [unit] => Array
                (
                    [0] => unit4
                    [1] => unit5
                )

        )

)

A potřebuji z toho sestavit
(
    [0] => Array
        (
            [manager] => manager1
            [unit] => Array
                (
                    [0] => unit1
                )
        )
    [1] => Array
        (
            [manager] => manager2
            [unit] => Array
                (
                    [0] => unit2
                    [1] => unit3
                    [2] => unit4
                    [3] => unit5
                )
        )
)
Chci záznamy seskupit na základě stejné hodnoty z pole [manager] (sloužící jako klíč). Pokud bych to dělal v databázi, tak bych věděl, ale v poli bych to nějak bastlil. Je nějaká funkce pro práci s polem, která toto umí? Nebo jak přesně na to? Budu rád za každou pomoc :-)
Tori
Profil
Dá se použít array_reduce + callback, ale normální foreach + zapisování do nového pole je rychlejší.
Enko
Profil
Děkuju za odpověď. Můžu poprosit o ukázku?
Tori
Profil
$data = array(); // tohle je to zdrojové pole

$result = array_reduce($data, function($carry, $item) {
    $carry[$item['manager']] = isset($carry[$item['manager']]) 
        ? array_merge($carry[$item['manager']], $item['unit']) 
        : $item['unit'];
    return $carry;
}, array());

// anebo

$result = array();
foreach ($data as $item) {
    $result[$item['manager']] = isset($result[$item['manager']]) 
        ? array_merge($result[$item['manager']], $item['unit']) 
        : $item['unit'];
}
Enko
Profil
Tori:
Jj, děkuju :-)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: