2011-09-04 4 views
1

J'ai un tableau qui contient un ensemble d'informations provenant d'une base de données, mais une partie est un doublon avec seulement 1 valeur dans la partie la plus profonde du tableau modifié . Par exemple:PHP trouver des valeurs à partir d'un tableau multidimensionnel puis les placer dans un tableau

[0] => Array(['id'] => 1 , ['name'] => "First Array" , ['more'] => "stuff") 
[1] => Array(['id'] => 2 , ['name'] => "Second Array" , ['more'] => "stuff1") 
[2] => Array(['id'] => 2 , ['name'] => "Second Array" , ['more'] => "stuff2") 
[3] => Array(['id'] => 3 , ['name'] => "Third Array" , ['more'] => "stuff3") 
[4] => Array(['id'] => 3 , ['name'] => "Third Array" , ['more'] => "stuff4") 

Ce que je suis en train de faire est d'obtenir des tableaux avec le même champ [ « id »] dans un tableau avec un tableau au lieu de [ « plus »]. Par exemple:

[0] => Array(['id'] => 1 , ['name'] => "First Array" , ['more'] => "stuff") 
[1] => Array(['id'] => 2 , ['name'] => "Second Array" , ['more'] => Array([0] => "stuff1" , [1] => "stuff2")) 
[2] => Array(['id'] => 2 , ['name'] => "Third Array" , ['more'] => Array([0] => "stuff3" , [1] => "stuff4")) 

J'ai essayé de le faire de plusieurs façons, mais le plus proche que je peux obtenir est une fonction qui va mettre toutes les valeurs [ « plus »] dans 1 tableau comme ceci:

[0] => Array(['id'] => 1 , ['name'] => "First Array" , ['more'] => "stuff") 
[1] => Array(['id'] => 2 , ['name'] => "Second Array" , ['more'] => Array([0] => "stuff1" , [1] => "stuff2" , [2] => "stuff3" , [3] => "stuff4")) 

et c'est de cette fonction:

<?php 
private function compress_duplicates($a = array()) { 
    $diff_key = array_diff_key($a , array_unique($a)); 
    $first_key = array_shift(array_keys($diffkey)); 
    $array["id"] = $diff_key[$first_key]["id"]; 
    $array["name"] = $diff_key[$first_key]["name"]; 
    foreach($diff_key as $term) { 
     $array["more"][] = $term["more"]; 
    } 
    return $array; 
} 
?> 

Fondamentalement, ce que je demande: Comment puis-je trouver des doublons dans un tableau multidimensionnel, puis placer chacun de ces doublons dans leur propre tableau?

Répondre

2
$result = array(); 
foreach ($array as $elem) { 
    if (isset($result[$elem['id']])) { 
     $result[$elem['id']]['more'] = array_merge((array)$result[$elem['id']]['more'], 
                array($elem['more'])); 
    } else { 
     $result[$elem['id']] = $elem; 
    } 
} 

éventuellement suivie d'un $result = array_values($result) si vous souhaitez réinitialiser les clés du tableau $result.

Questions connexes