se ho ben capito
Codice PHP:
<?php
/*
array(245=>97, 454 => 46, [249]=> string(2) "37" [253]=> string(2) "10" [451]=> string(1) "6" [45]=> string(1) "3" [234]=> string(1) "2" [16]=> string(1) "2" [316]=> string(1) "1" [320]=> string(1) "1" [328]=> string(1) "1" [110]=> string(1) "1" [357]=> string(1) "1" [310]=> string(1) "1" [221]=> string(1) "1" [370]=> string(1) "1" [238]=> string(1) "1" }
array(4) { [0]=> array(2) { ["num"]=> string(2) "48" ["category"]=> string(3) "245" } [1]=> array(2) { ["num"]=> string(2) "24" ["category"]=> string(3) "249" } [2]=> array(2) { ["num"]=> string(2) "16" ["category"]=> string(3) "454" } [3]=> array(2) { ["num"]=> string(1) "9" ["category"]=> string(3) "253" } }
*/
$arrUno = array(245=>97,454=>46,249=>37,253=>10,451=>6,45=>3,234=>2,16=>2,315=>1,320=>1,328=>1,110=>1,357=>1,310=>1,221=>1,370=>1,238=>1);
$arrDue = array(
array('num' => '48','category'=>'245'),
array('num' => '24','category'=>'249'),
array('num' => '16','category'=>'454'),
array('num' => '9','category'=>'253')
);
//riscrivo arrayDue
$newArrayDue = array();
foreach($arrDue as $value)
$newArrayDue[$value['category']]=$value['num'];
echo "prima:\n";
print_r($arrUno);
echo "\n\n";
echo "newArrayDue:\n";
print_r($newArrayDue);
$cmpFunction = function($keyA,$keyB) use(&$newArrayDue,&$arrUno){
if(array_key_exists($keyA,$newArrayDue) && !array_key_exists($keyB,$newArrayDue))
return -1;
if(!array_key_exists($keyA,$newArrayDue) && array_key_exists($keyB,$newArrayDue))
return 1;
if(array_key_exists($keyA,$newArrayDue) && array_key_exists($keyB,$newArrayDue))
return $newArrayDue[$keyA] == $newArrayDue[$keyB] ? 0 :
($newArrayDue[$keyA] > $newArrayDue[$keyB] ? -1 : 1);
return $arrUno[$keyA] == $arrUno[$keyB] ? 0 : ($arrUno[$keyA] > $arrUno[$keyB] ? -1 : 1 );
};
uksort($arrUno,$cmpFunction);
echo "atteso:\n";
echo "245,249,454,253,gli altri ordinati per valore desc";
echo "\n\n";
echo "dopo ordinamento:\n";
print_r($arrUno);
praticamente ordinato sul "num" associato all'id della categoria