رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
انتخاب ده عدد بزرگ از آرایه
#1
سلام و خسته نباشید
به این کد ی نگا بندازید.

$array=array(100,14,7,8,9,6,87,778,99,8,36,4,147,36,9,4,747,99,6,33,1,47,477,17,669,3,7,7,666,555,44,33,33,223,233,453,6756,4534,12,24,12,4535,77,87,43,23);


من میخوام تو این آرایه ده عدد بزرگ رو انتخاب کنم و به همراه شماره خانه هایش در یک آرایه دیگر دخیره کنم.
مثلا 14<=3 (بعدا بفهمم که خانه ی 3 یکی از ده عدد بزرگ بوده)
من فقط میتونم یک عدد بزرگ رو برگردونم.
میشه ی راهنمایی کوچیک بکنید.
بقیه رو خودم تکمیل میکنم.
خیلی ممنون
پاسخ
تشکر شده توسط:
#2
function getMaxItems($array, $count)
{
    rsort($array);
    $result = array();
    while(count($result) < $count && count($array) > 0) {
        $result[] = array_shift($array);
    }
    return $result;
}

$array = array(100, 14, 7, 8, 9, 6, 87, 778, 99, 8, 36, 4, 147, 36, 9, 4, 747, 99, 6, 33, 1, 47, 477, 17, 669, 3, 7, 7, 666, 555, 44, 33, 33, 223, 233, 453, 6756, 4534, 12, 24, 12, 4535, 77, 87, 43, 23);

echo '<pre>' . print_r(getMaxItems($array, 10), true) . '</pre>';

/* Output:
Array
(
    [0] => 6756
    [1] => 4535
    [2] => 4534
    [3] => 778
    [4] => 747
    [5] => 669
    [6] => 666
    [7] => 555
    [8] => 477
    [9] => 453
)
*/
پاسخ
تشکر شده توسط: olampiad
#3
<?php

function maxN(array $numbers, $n)
{
   $maxHeap = new SplMaxHeap;
   foreach($numbers as $number) {
       $maxHeap->insert($number);
   }
   return iterator_to_array(
       new LimitIterator($maxHeap, 0, $n)
   );
}

$array=array(100,14,7,8,9,6,87,778,99,8,36,4,147,36,9,4,747,99,6,33,1,47,477,17,669,3,7,7,666,555,44,33,33,223,233,453,6756,4534,12,24,12,4535,77,87,43,23);
print_r( maxN( $array, 10 ) );


Array
(
   [45] => 6756
   [44] => 4535
   [43] => 4534
   [42] => 778
   [41] => 747
   [40] => 669
   [39] => 666
   [38] => 555
   [37] => 477
   [36] => 453
)
منبع
پاسخ
تشکر شده توسط: olampiad
#4
تشکر فراوان از اساتید بزرگوار
خیلی ممنون بابت پاسخ ها
فقط ی مشکل ساده ای تو اینجا هستش که شماره خانه آرایه اصلی رو من نمیدونم.
عدد 6756 بزرگترین عد هستش ولی من بعدا نمیدونم که این عدد در کدام خانه ی آرایه من بوده است.
این عدد در خانه ی 20 آرایه اصلی بوده است.
چطوری میتونم من خانه ی آرایه هارو هم داشته باشم.
امید وارم منظورمو متوجه شده باشین.
بازم تشکر فراوان بابت راهنمایی ها و کمک هاتون
پاسخ
تشکر شده توسط:
#5
سلام
به تصویری که براتون فرستادم  نگا بندازید.
من دارم از دیتابیسم گزارش و آمار میگیرم.
سوالاتمو مربوط به این موضوع می پرسم.
الآن به این کد ی نگا بندازید.

$user=$this->model->all_user();
$user_c=array();

foreach($user as $us){
$user_c[]=$this->model->count_user($us['id']);
}


الان من در اینجا میخوام آرایه $user_c رو مرتب کنم ولی طوری باشه که اونو بتونم به آرایه $user ربط بدم.
یعنی خانه ی سوم آرایه اولی ربط داره به خانه ی سوم آرایه دومی.
امیدوارم منظورمو متوجه شده باشین
خیلی ممنون


فایل‌های پیوست تصاویر بندانگشتی
   
پاسخ
تشکر شده توسط:
#6
function getMaxItems($array, $count)
{
    $sorted = $array;
    rsort($sorted);
    $result = array();
    while(count($result) < $count && count($array) > 0) {
        $item = array_shift($sorted);
        $key = array_search($item, $array);
        unset($array[$key]);
        $result[$key] = $item;
    }
    return $result;
}

$array = array(100, 14, 7, 8, 9, 6, 87, 778, 99, 8, 36, 4, 147, 36, 9, 4, 747, 99, 6, 33, 1, 47, 477, 17, 669, 3, 7, 7, 666, 555, 44, 33, 33, 223, 233, 453, 6756, 4534, 12, 24, 12, 4535, 77, 87, 43, 23);

echo '<pre>' . print_r(getMaxItems($array, 10), true) . '</pre>';

/* Output:
Array
(
    [36] => 6756
    [41] => 4535
    [37] => 4534
    [7] => 778
    [16] => 747
    [24] => 669
    [28] => 666
    [29] => 555
    [22] => 477
    [35] => 453
)
*/
پاسخ
تشکر شده توسط: olampiad
#7
تشکر فراوان بابت راهنمایی ها
واقعا ممنون
همونطور که میبینید در این تابع مقادیر بیشتر رو انتخاب میکنه و در داخل آرایه قرار میده یعنی : بیشترین مقادیر انتخاب میشن.
حالا
اگه من بخوام کمترین مقادیر رو انتخاب کنه باید جای کدوم تابع رو عوض کنم.
خیلی ممنون
پاسخ
تشکر شده توسط:
#8
بجای rsort از sort استفاده کنید.
پاسخ
تشکر شده توسط: olampiad




کاربران در حال بازدید این موضوع: 1 مهمان