PDA

View Full Version : مرتب سازی آرایه از حروف کوچیک به بزرگ



olampiad
چهارشنبه 23 اردیبهشت 1394, 15:11 عصر
سلام و خسته نباشید به دوستان عزیز
به این آرایه من ی نگا بندازید.


$number=array(10,36,14,3,78,147,698,74,16,84,369,1 8);
$name=array('hamid','ali','mohammad','reza','javad ','jafar','mamadreza','vali','pooya','mohsen','omi d','hosein');

این آرایه ها به هم متصل هستند.
یعنی خونه ی 0 هردو آرایه به یک نفر متعلق هستش یا خونه ی 7 هر دو آرایه به یک نفر متعلق هستش.
من میخوام آرایه ی number$ رو بر اساس اعداد کوچک به بزرگ مرتب کنم.(یعنی کوچک ترین عدد در خانه ی اول و بزرگترین عدد در خانه ی آخر قرار بگیرد).
چطوری میتونم این کار رو انجام بدم.
میشه تو این زمینه ی کوچولو کمکم کنید.(اگه ی کوچولو توضیح بدید بقیه رو خودم ادامه میدم.)
میخوام وقتی که آرایه ی اعداد مرتب شد آرایه ی اسم ها هم به همون ترتیب مرتب بشه و بهم نخوره.
آیا این کار شدنی هستش؟
امیدورم تونسته باشم منظورمو رسونده یاشم.
خیلی ممنون

MMSHFE
چهارشنبه 23 اردیبهشت 1394, 15:22 عصر
خیلی ساده است:

$number=array(10,36,14,3,78,147,698,74,16,84,369,1 8);
$name=array('hamid','ali','mohammad','reza','javad ','jafar','mamadreza','vali','pooya','mohsen','omi d','hosein');

$count = count($number);
for($i = 0; $i < $count; $i++) {
for($j = $i + 1; $j < $count; $j++) {
if($number[$i] > $number[$j]) {
$temp = $number[$i];
$number[$i] = $number[$j];
$number[$j] = $temp;
$temp = $name[$i];
$name[$i] = $name[$j];
$name[$j] = $temp;
}
}
}

echo '<pre>' . print_r($number, true) . '</pre>';
echo '<pre>' . print_r($name, true) . '</pre>';

/* Output:
Array
(
[0] => 3
[1] => 10
[2] => 14
[3] => 16
[4] => 18
[5] => 36
[6] => 74
[7] => 78
[8] => 84
[9] => 147
[10] => 369
[11] => 698
)

Array
(
[0] => reza
[1] => hamid
[2] => mohammad
[3] => pooya
[4] => hosein
[5] => ali
[6] => vali
[7] => javad
[8] => mohsen
[9] => jafar
[10] => omid
[11] => mamadreza
)
*/

Mohammadsgh
چهارشنبه 23 اردیبهشت 1394, 18:45 عصر
این نمونه هم ببینید خوبه


$cars = array(150, 25, 125,2,36);
sort($cars);

$clength = count($cars);
for($x = 0; $x < $clength; $x++) {
echo $cars[$x];
echo "<br>";
}

us1234
چهارشنبه 23 اردیبهشت 1394, 20:31 عصر
این نمونه هم ببینید خوبه


$cars = array(150, 25, 125,2,36);
sort($cars);

$clength = count($cars);
for($x = 0; $x < $clength; $x++) {
echo $cars[$x];
echo "<br>";
}


با این کد آرایه اول مرتب میشود ولی دیگه هیچ تصمیمی برای آرائه دوم نمیشود گرفت .

در کل روشی که قبلا ارائه شده است درست است ولی روش های مرتب سازی زیادی داریم ، مثل حبابی ، باینری ، ادغامی و ...

Mohammadsgh
چهارشنبه 23 اردیبهشت 1394, 20:43 عصر
تا اونجایی که من خوندم آرایه number رو میخواستن همچین کاری بکنن.به خاطر همین این کد رو دادم

MMSHFE
پنج شنبه 24 اردیبهشت 1394, 00:13 صبح
سؤال استارتر رو کامل بخونید:

میخوام وقتی که آرایه ی اعداد مرتب شد آرایه ی اسم ها هم به همون ترتیب مرتب بشه و بهم نخوره.

olampiad
پنج شنبه 24 اردیبهشت 1394, 00:14 صبح
تشکر فراوان از دوستان عزیز بابت راهنمایی هاشون
عذر خواهی میکنم که تاپیک رو طولانی کردم.
من در سری اول میخواستم که به جای اعداد تاریخ هارو به صورت روبرو بنویسم که همونطور که گفتین مرتب کردنش خیلی راحت بود. 1384,1388,1377,1394,1391
ولی
کارفرما گفته که تاریخ هارو به صورت زیر بنویسم.


$number=array('1394/2/17',1394/11/19,1393/3/7,1394/11/29,1374/3/8,1388/21/16,1392/1/3,1394/4/30,1394/2/7,1389/5/23,1390/12/9,1384/4/14);
$name=array('hamid','ali','mohammad','reza','javad ','jafar','mamadreza','vali','pooya','mohsen','omi d','hosein');


حالا ی سوال داشتم از شما دوست عزیز
آیا بازم میشه آرایه number رو از تاریخ کوچک به تاریخ بزرگ مرتب کرد؟
یعنی قدیمی ترین تاریخ تو خونه ی اول باشه و جدید ترین تاریخ هم تو خونه ی آخر:
آیا این کار شدنی هستش؟
خیلی ممنون

MMSHFE
پنج شنبه 24 اردیبهشت 1394, 00:23 صبح
اگه میخواین از تاریخ استفاده کنید، باید با کمک usort آرایه رو با کمک یک تابع که دستی نوشتین مرتب کنید یا اینکه یک آرایه دیگه بسازین که مقادیرش، Timestamp های متناظر با هر تاریخ هست و اون آرایه رو مرتب کنید و برحسب اون ترتیب، تاریخها و اسامی رو هم مرتب کنید. مثال:

require_once 'jdf.php'; // download from jdf.scr.ir
$number = array('1394/2/17', '1394/11/19', '1393/3/7', '1394/11/29', '1374/3/8', '1388/21/16', '1392/1/3', '1394/4/30', '1394/2/7', '1389/5/23', '1390/12/9', '1384/4/14');
$name = array('hamid', 'ali', 'mohammad', 'reza', 'javad', 'jafar', 'mamadreza', 'vali', 'pooya', 'mohsen', 'omid', 'hosein');
$ts = array();
foreach($number as $date) {
list($y, $m, $d) = explode('/', $date);
$ts[] = jmktime(0, 0, 0, $m, $d, $y);
}
$count = count($ts);
for($i = 0; $i < $count; $i++) {
for($j = $i + 1; $j < $count; $j++) {
if($ts[$i] > $ts[$j]) {
$temp = $ts[$i];
$ts[$i] = $ts[$j];
$ts[$j] = $temp;
$temp = $number[$i];
$number[$i] = $number[$j];
$number[$j] = $temp;
$temp = $name[$i];
$name[$i] = $name[$j];
$name[$j] = $temp;
}
}
}