💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۳ حسن سهرابیان
چالش برنامه نویسی NerdStudent
جامعه پی اچ پی ایجاد شده در ۱۴ بهمن ۱۳۹۸

سوال )‌  مانند نمونه سه آرایه PHP Multidimensional Arrays  داده شده است . با توجه به آرایه مذکور یک تابع جمع برای بدست آوردن جمع نمرات دانشجویان Nerd در ستون دوم (marks) از هر سطر با ID مشخص شده ( 920 , 921 , 922 ) بنویسید و نیز تابع ای دیگر برای جایگزینی مقادیر جمع بدست آمده به داخل فیلد marks بنویسید به گونه ای که حاصل بدست آمده در فیلد marks جایگزین مقادیر قبلی شود همچنین در یکی از توابع بررسی نمائید که اگر کاربر در آرایه ورودی بیشتر از ۷ عدد وارد کرد رشته ی  "that's bullshit "  چاپ شود و  نیز خروجی را مانند نمونه چاپ نمائید :‌

 

آرایه‌های موجود طبق صورت سوال :‌

 

$studentAndMarks = array (
    920 => array(
        "name" => "SMITH",
        "marks" => [2,6,7,8,9,9,12] // 53
    ),
    921 => array (
        "name" => "JOHNSON",
        "marks" => [2,6,7,8,9,10,12] // 54
    ),
    922 => array (
        "name" => "WILLIAMS",
        "marks" => [2,6,7,8,9,8,12] // 52
    )
);

 

خروجی‌های اول و دوم  به ترتیب ( چاپ کردن خروجی‌ها )‌ :‌

خروجی اول

array(3) { [920]=> array(2) { ["name"]=> string(5) "SMITH" ["marks"]=> int(53) } [921]=> array(2) { ["name"]=> string(7) "JOHNSON" ["marks"]=> int(54) } [922]=> array(2) { ["name"]=> string(8) "WILLIAMS" ["marks"]=> int(52) } } 

یا خروجی در حالت console ویرایشگر vscode حالت بالا به شکل زیر خواهد بود :‌

array(3) {
  [920]=>
  array(2) {
    ["name"]=>
    string(9) "sohrabian"
    ["marks"]=>
    int(53)
  }
  [921]=>
  array(2) {
    ["name"]=>
    string(6) "khoram"
    ["marks"]=>
    int(54)
  }
  [922]=>
  array(2) {
    ["name"]=>
    string(4) "ziai"
    ["marks"]=>
    int(52)
  }
}

 

خروجی دوم ( باید به شکل زیر چاپ شود )‌ :‌

/*
920 name : SMITH ---marks : 53
921 name : JOHNSON ---marks : 54
922 name : WILLIAMS ---marks : 52 
/*

 

 

سورس الگوریتم مثال بالا :‌

<?php
function sumMarks (Array $marks) {
            $digit_marks = 0 ;
            if (count($marks)<=7) {
                for ($i=0; $i < count($marks) ; $i++) {
                    $digit_marks = $marks[$i] + $digit_marks;
                }
                return $digit_marks;
            }else{
                return "that's bullshit";
            }
        }
function getArray (Array $array) { 
    $studentAndMarks = $array ;
    $keysID = array_keys($studentAndMarks);
    for( $i=0;$i<count($keysID);$i++) {
        $keys = array_keys($studentAndMarks[$keysID[$i]]);
        if (is_array($studentAndMarks[$keysID[$i]]["marks"])) {
            // var_dump($studentAndMarks[$keysID[$i]]["marks"]);
            echo "<br>";
            $studentAndMarks[$keysID[$i]]["marks"]=sumMarks($studentAndMarks[$keysID[$i]]["marks"]);
        }
    }
    return $studentAndMarks;
    // multiSort($studentAndMarks);
}    
$studentAndMarks = array (
    920 => array(
        "name" => "SMITH",
        "marks" => [2,6,7,8,9,9,12] // 53
    ),
    921 => array (
        "name" => "JOHNSON",
        "marks" => [2,6,7,8,9,10,12] // 54
    ),
    922 => array (
        "name" => "WILLIAMS",
        "marks" => [2,6,7,8,9,8,12] // 52
    )
);
// var_dump($studentAndMarks);
// echo "<br><br><br>";
var_dump(getArray($studentAndMarks));
echo "<br><br><br>";
foreach (getArray($studentAndMarks) as $key => $value) {
    echo "$key " ;
    foreach ($value as $key => $val) {
        if($key == "name") {
            echo "$key :  $val ---";
        }else{
            echo "$key : $val ";
        }
    } echo "<br>";
}

 

 

در انتها متذکر می‌شوم جواب دادن به آزمون‌های سون لرن به تنهایی باعث موفقیت شما نخواهند شد بلکه دست و پنجه نرم کردن با الگوریتم دید شما و تفکر الگوریتمیک را به شما خواهند داد .

سلام و عرض ادب

دمت گرم آقایی سهرابیان واقعا چالش خوب بود.مریضم هستم ولی دوتا پتو کشیدم دورم شروع کردم کد زدن.چالش جذابی بود.سعی کردم  با کد شما متفاوت باشه حالا اگه درست صورت مسئله رو متوجه شدم باشم.

# function for sum Marks's fields 
function sumMarks($arr)
{
    foreach ($arr as $id => $value) {
        $sum = array_sum($value['marks']);
        $arr[$id]['marks'] = $sum;
    }
    return $arr;
}
# function for 7 length and print new mark's value
function forSumMarksFields(array $arr)
{
    foreach($arr as $id => $value){
        $length = count($value['marks']);
        if($length <= 7){
            continue;
        }else{
            echo "that's bullshit";
         die();
        }
    }
    return sumMarks($arr);   
}
print_r(forSumMarksFields($studentAndMarks));
# outline Array ( [920] => Array ( [name] => SMITH [marks] => 53 ) [921] => Array ( [name] => JOHNSON [marks] => 54 ) [922] => Array ( [name] => WILLIAMS [marks] => 52 ) )
#function for print like your example
 function printArr($arr) {
     foreach ($arr as $id => $value) {
        echo $id ." name : ". $value['name'] . " ---marks : " . $value['marks']. "<br>";
     }
 }
 echo "<br>";
 echo "<br>";
printArr(forSumMarksFields($studentAndMarks));
// outline:
# 920 name : SMITH ---marks : 53
# 921 name : JOHNSON ---marks : 54
# 922 name : WILLIAMS ---marks : 52

 

جبار محمدی ۱۴ بهمن ۱۳۹۸، ۲۲:۴۰

ایا استفاده از فانکشن‌های تو در تو درست هست؟


SumMarks($studentAndMarks);
function SumMarks($arrays){
    foreach($arrays as $key=>$array){
        $arrays[$key]['marks']=array_sum($array["marks"]);
    }
    printArray($arrays);
}
function CheckMarks($arrays)
{
    foreach ($arrays as $key=>$array) {
        if (sizeof($array["marks"]) >7) {
            echo  "Arrya Index " . $key ." that's bullshit";
        }
    }
}
function printArray($arrays)
{
   /*
        920 name : SMITH ---marks : 53
        921 name : JOHNSON ---marks : 54
        922 name : WILLIAMS ---marks : 52 
    */
    foreach($arrays as $key=>$array){
        echo $key ." name : " . $array["name"] . "---marks : " . $array["marks"] . "<br>";
    }
}

 

Daniyal Amiri ۱۷ اسفند ۱۳۹۸، ۱۶:۲۶
function sumArrMarks($studentAndMarks = null){
    foreach ($studentAndMarks as $key => $value){
        $studentAndMarks[$key]['marks'] = array_sum($value["marks"]);
    }
    return $studentAndMarks;
}
function more7($studentAndMarks = null){
    foreach ($studentAndMarks as $key => $value){
        if (sizeof($value['marks']) > 7){
            echo "that's bullshit";
            die();
        }
    }
    print_r(sumArrMarks($studentAndMarks));
}
function printRr($studentAndMarks = null){
    foreach ($studentAndMarks as $key => $value){
        echo "<br>".$key . " name: " .$value['name'] ." --- marks: ".$value['marks'] ;
    }
}
more7($studentAndMarks);
printRr($studentAndMarks);
علیرضا جهانی ۰۷ دی ۱۳۹۹، ۲۰:۴۴