فراخوانی ارایه

پرسیده شده
فعالیت 912 روز پیش
دیده شده 404 بار
0

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

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

 

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

فایل پیوست

محمد خضرپور
محمد خضرپور

7 آبان 00

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 رو بردارید.

فایل پیوست

محسن موحد

توسط

محسن موحد

7 آبان 00

حذف شده
اقای موحد این فانکشن setArray ناشناخته است ؟ مال php دیگه
محمد خضرپور

7 آبان 00

حذف شده
خودم تعریفش کردم.
محسن موحد

7 آبان 00

حذف شده
واقعا ببخشید من زیر رو اصلا ندید
محمد خضرپور

7 آبان 00

حذف شده
??
محسن موحد

7 آبان 00

1
حذف شده

سلام.

این مثالی که پایین میارم، به ترتیب مقادیرو میگیریم و هر وقت نیاز بود با 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();
فایل پیوست

محسن موحد

توسط

محسن موحد

7 آبان 00

0
حذف شده

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

 

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

 

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

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

 

$num = 1 ;

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

 

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

فایل پیوست

محمد خضرپور

توسط

محمد خضرپور

7 آبان 00

حذف شده
شما میخواید هر وقت اسکریپت اجرا شد، یک خونه از آرایه چاپ بشه یعنی در اجراهای بعدی اسکریپت مقدار تکراری چاپ نشه؟؟ چون اللن این شرطی که گذاشتید، اگر getValue رو دوبار بنویسید مقادیر عوض میشه
محسن موحد

7 آبان 00

حذف شده
یا اینکه، اگر getValue فراخوانی شد، تمام خونه های آرایه چاپ بشه؟
محسن موحد

7 آبان 00

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

7 آبان 00

حذف شده
یا اینکه بسته به شرط خونه ای از آرایه چاپ بشه؟ شما خروجی که میخوایدو بنویسید تا من کدشو بنویسم
محسن موحد

7 آبان 00

حذف شده
الان کدوم شد؟
محسن موحد

7 آبان 00

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

7 آبان 00