PDA

View Full Version : سوال: مرتب کردن آرایه



MoMo121
چهارشنبه 12 شهریور 1393, 16:08 عصر
با سلام خدمت دوستان

یه آرایه ای به شکل زیر وجود داره


Array(
[0] => stdClass Object
(
[id] => 1
[DKey] => 4
[DName] => mohammad
[DTitle] => mo
)
[1] => stdClass Object
(
[id] => 2
[DKey] => 6
[DName] => Erfan
[DTitle] => Erf
)
)



می خوام مثلا براساس مقادیر Dkey ( یا DTitle یا DName ) مرتبش کنم لطفا کمک کنید خیلی ضروریه

arash691
چهارشنبه 12 شهریور 1393, 17:16 عصر
این لینک رو بررسی کنید :


http://stackoverflow.com/questions/4508145/sort-php-multidimensional-array-by-sub-value

bagherok
چهارشنبه 12 شهریور 1393, 17:32 عصر
یا این!


<?php
$arr=Array(
array(
'id' => 1,
'DKey' => 11,
'DName' => 'abc',
),
array(
'id' => 2,
'DKey' => 2,
'DName' => 'abd',
),
array(
'id' => 2,
'DKey' => 10,
'DName' => 'ab',
)
);



function bcmp($a, $b) {
return $a["DKey"] - $b["DKey"];
}
usort($arr, "bcmp");
echo 'sort by Dkey...<br/><pre>'.print_r($arr,true).'</pre>';



function scmp ($a, $b) {
return strcasecmp($a['DKey'], $b['DKey']);
}
usort($arr, "scmp");
echo 'sort by DName...<br/><pre>'.print_r($arr,true).'</pre>';

?>

MoMo121
چهارشنبه 12 شهریور 1393, 21:48 عصر
یا این!


<?php
$arr=Array(
array(
'id' => 1,
'DKey' => 11,
'DName' => 'abc',
),
array(
'id' => 2,
'DKey' => 2,
'DName' => 'abd',
),
array(
'id' => 2,
'DKey' => 10,
'DName' => 'ab',
)
);



function bcmp($a, $b) {
return $a["DKey"] - $b["DKey"];
}
usort($arr, "bcmp");
echo 'sort by Dkey...<br/><pre>'.print_r($arr,true).'</pre>';



function scmp ($a, $b) {
return strcasecmp($a['DKey'], $b['DKey']);
}
usort($arr, "scmp");
echo 'sort by DName...<br/><pre>'.print_r($arr,true).'</pre>';

?>




خیلی ممنون کد کار میکنه ولی 3 سوال داشتم

اگه بخوام برعکس حروف الفبا رو چاپ کنم چه کنم ؟
کد فوق دقیقا چیکار میکنه ؟


اگه مثلا براساس DKey مرتب کردیم و دو عبارت عین هم در آمدن و خواستیم اون دو عبارت رو براساس DName مرتب کنیم چه باید کرد ؟؟؟؟؟

bagherok
پنج شنبه 13 شهریور 1393, 10:00 صبح
خیلی ممنون کد کار میکنه ولی 3 سوال داشتم

اگه بخوام برعکس حروف الفبا رو چاپ کنم چه کنم ؟
کد فوق دقیقا چیکار میکنه ؟


اگه مثلا براساس DKey مرتب کردیم و دو عبارت عین هم در آمدن و خواستیم اون دو عبارت رو براساس DName مرتب کنیم چه باید کرد ؟؟؟؟؟
تو کد بالا تو فانکشن scmp باید DName ها مقایسه میشند که به اشتباه Dkey بود.

درمورد سوال اولتون منظورتون رو متوجه نشدم.
درمورد سوال دوم به اینجا سربزنید http://php.net/manual/en/function.usort.php
درمورد سوال سوم

<?php
$arr=Array(
array(
'id' => 1,
'DKey' => 6,
'DName' => 'abc',
),
array(
'id' => 2,
'DKey' => 3,
'DName' => 'abd',
),
array(
'id' => 3,
'DKey' => 2,
'DName' => 'a',
),
array(
'id' => 4,
'DKey' => 2,
'DName' => 'ac',
)
);



function bcmp($a, $b) {
if($a["DKey"]==$b["DKey"])
return strcasecmp($a['DName'], $b['DName']);
return $a["DKey"] - $b["DKey"];
}
usort($arr, "bcmp");
echo 'sort by Dkey...<pre>'.print_r($arr,true).'</pre>';



function scmp ($a, $b) {
return strcasecmp($a['DName'], $b['DName']);
}
usort($arr, "scmp");
echo 'sort by DName...<pre>'.print_r($arr,true).'</pre>';

?>