Czasami dla celów przetwarzania danych, należy dokonać agregacji danych i ustalić tabelę w odwrotnym porządku.
function flipAndGroup($input) { $outArr = array(); array_walk($input, function($value, $key) use (&$outArr) { if(!isset($outArr[$value]) || !is_array($outArr[$value])) { $outArr[$value] = []; } $outArr[$value][] = $key; }); return $outArr; }
Tabela do zbadania - nazwy użytkowników i kraje z jakich pochodzą:
$users_countries = array( 'username1' => 'US', 'user2' => 'US', 'newuser' => 'GB' ); print_r(flipAndGroup($users_countries)); ?>
Statystyka wynikająca z badania tą funkcją:
Array ( [US] => Array ( [0] => username1 [1] => user2 ) [GB] => Array ( [0] => newuser ) )
Kolejny przykład:
$base= array('one', 'two', 'three'); $tosort= array('a'=>'two', 'b'=>'three', 'c'=>'five', 'd'=>'one', 'and'=>'four', 'f'=>'one'); uasort($tosort, function($key1, $key2) use ($base) { $a1=array_search($key1, $base); $a2=array_search($key2, $base); if ( $a1===false && $a2===false ) { return 0; } else if ( $a1===false && $a2 !== false) { return 1; } else if ( $a1!==false && $a2 === false) {return -1;} if( $a1 > $a2 ) { return 1; } else if ( $a1 < $a2 ) { return -1; } else if ( $a1 == $a2 ) { return 0; } }); var_dump($tosort);
Otrzymamy na końcu powstałej tablicy klucze unikalne, po uporządkowaniu:
array (6) d => "one" (3) f => "one" (3) a => "two" (3) b => "three" (5) c => "five" (4) and => "four" (4)