روز برنامه‌نویس مبارک 🤩🎉 از هدایای روز برنامه‌نویس جا نمونی ⌛
۰ ثانیه
۰ دقیقه
۰ ساعت
۳ محمد خضرپور
فراخوانی ارایه
محسن موحد حل شده توسط محسن موحد

سلام من یه فانکشنی دارم که میخوام توی این فانکشن یک ارایه توی یه لوپ فراخوانی میشه ولی نمیخوام که وقتی فانکشن فراخوانی شده همه اعضای ارایه پشت سر هم خونده بشن 

میخوام بهش بگ که هر بار این فانکشن فراخوانی شد یک عضو این ارایه خونده بشه و بسته بشه و دفعه دیگه که فراخونی میشه عضو بعد اون خونده بشه و دوباره بسته بشه و این روال اینطوری ادامه داشته باشه 

 

لطفا راهکار رو بهم بگید ممنون

سلام.

این مثالی که پایین میارم، به ترتیب مقادیرو میگیریم و هر وقت نیاز بود با reset پوینترو میاره ابتدای آرایه.

<?php 
class Helper 
{
    public static $arr = ['mohsen', 'movahed', 'expert', 'php'];
    public static function getValue()
    {
        $current = current(self::$arr);
        next(self::$arr);
        return $current;
    }
    public static function reset()
    {
        reset(self::$arr);
    }
}
echo Helper::getValue(); // mohsen
echo Helper::getValue(); // movahed
echo Helper::getValue(); // expert
echo Helper::getValue(); // php
echo '<hr>';
Helper::reset();
echo Helper::getValue(); // mohsen
echo Helper::getValue(); // movahed

اگر هدفتون چیزه دیگه ایه، بیشتر توضیح بدید تا اونو بنویسم.

این مثالو روی فانکشن هم میشه پیاده کرد:

<?php 
function helper() {
    static $arr = ['mohsen', 'movahed', 'expert', 'php'];
    $current = current($arr);
    next($arr);
    return $current;
}
echo helper();
echo helper();
echo helper();
echo helper();
محسن موحد ۰۷ آبان ۱۴۰۰، ۱۴:۴۳

اقای موحد این کد رو ران کردم نتیجه ای که میخوام نشد 

 

الان دقیق نمیدونم چجوری توضیح بدم ولی اینجا شما چند بار پشت سر هم متد رو فراخونی کردید ولی نباید اینجوری باشه من میخوام یه بار فراخونی کنم این متد رو خودش اینکارو بکنه 

 

اینجوری فرض کنید من یک شرطی گذاشتم که مثلا میگه اگه اینجوری شد این متد مارو فراخونی کنه ینی این متد یبار اونجا نوشته میشه 

حالا این متد این ارایه داره و هربار اون شرط true شد این متد یکی از اعضای این ارایه رو برگردونه 

 

$num = 1 ;
if($num == 1){
    echo Helper::getValue();
}

 

به این شکل . الان اینجا هر بار عدد برابر 1 باشه اون متد شما فراخوانی میشه ولی هر بار محسن رو برمیگردوه

محمد خضرپور ۰۷ آبان ۱۴۰۰، ۱۵:۳۰

این اسکریپت در هربار اجرا یک مقدارو چاپ میکنه.

یعنی هربار که صفحه رفرش بشه یک مقدار جدید چاپ میشه و وقتی به انتها برسه مجدداً از سر گرفته میشه:

<?php 
if(!isset($_SESSION)) {
    @session_start();
}
function helper() {
    A:
    setArray();
    $current = array_shift($_SESSION['arr']);
    if(is_null($current)) {
        unset($_SESSION['arr']);
        setArray();
        goto A;
    }
    return $current;
}
function setArray() {
    if(!isset($_SESSION['arr'])) {
        $_SESSION['arr'] = ['mohsen', 'movahed', 'expert', 'php'];
    }
}
echo helper();

اگرم خواستید وقتی آرایه به انتها رسید دوباره در اجراهای بعدی چیزی چاپ نشه، میتونید شرط is_null رو بردارید.

بهترین پاسخ
محسن موحد ۰۷ آبان ۱۴۰۰، ۱۸:۵۶