PHP如何从干净状态重用一个函数

时间:2012-03-06 18:04:38

标签: php

`我有一个叫做计算的函数;我想要做的是在计算结果的函数中运行一些循环。有时这个功能确实失败了,因为它会陷入循环,所以iv得到覆盖退出循环,但我的问题是我想重新启动这个功能,并希望它出来的结果,如果不是我会再试一次..平均来说,请求在20左右没有结果,我需要从干净的平板重启功能。

我试图在重新运行该过程之前取消所有变量而不成功。请注意,此函数有时会从传递给过程的信息失败,因此无法避免 当这种诅咒时我只想自动重新运行该功能以产生结果。

http://www.gamezslave.com/test/DynamicSlots.swf这是我的测试原型给你一个想法 有时你刷新它会因为这个因素而出错。

<?php
$checker = 0; // if i cant get a result i could use this will tick up until condition
function shuffleArray($myArray) {
    $value_count = array_count_values($myArray);
    $last_value = $myArray[count($myArray) - 1];
    unset($myArray[count($myArray) - 1]);
    $shuffle = array();
    $last = false;

    while (count($myArray) > 0) {
        $keys = array_keys($myArray);
        $i = round(rand(0, count($keys) - 1));
        while ($last === $myArray[$keys[$i]] ) {
            $i = round(rand(0, count($keys) - 1));
    echo "stuck";
            $checker++;
    if($checker>10){
        echo " Too many checks so die, and restart process ";
        return false;
        bob; // this is the check function to goto and restart
    }
        }
        $shuffle[] = $myArray[$keys[$i]];
        $last = $myArray[$keys[$i]];
        unset($myArray[$keys[$i]]);
    }

    if ($last_value === $last) {
        $i = 0;
        foreach($shuffle as $key=>$value) {
            if ($value !== $last_value) {
                $i = $key;
                break;
            }
        }
        array_slice($shuffle, $i + 1, 0, $last_value);
    } else {
        $shuffle[] = $last_value;
    }
    return $shuffle;
}

print_r(shuffleArray(array(1,5,5,3,7,7,7,7))); // just a example
function bob(){
if($checker>10){
    $checker = 0;
    shuffleArray();
    echo "bob";
        reset($myArray); // thought this may clean/reset the array i couldnt use
    }
}

这个洗牌回来的想法是,没有两个相同的符号元素将彼此相邻但有时候在数组的末尾随机改组,剩下不好的赔率(苹果,橙色,橙色,橙色)所以我需要做的是从头开始重新启动这个过程请记住,数组中有大约10个不同的项目,例如10个苹果,10个橙子4个bannanas 3个葡萄的重复项有时候洗牌设法产生一个结果,我坚持在数组末尾有太多相同的项目,然后我需要重新运行脚本(这一点是问题)我不知道如何。

3 个答案:

答案 0 :(得分:3)

你在使用全局变量吗?

如果是:停止。这是一种可怕的做法。认真。从来没有理由使用具有任何理智代码的全局变量。

如果不是:没有什么可做的。每个函数调用都是一个干净的平台。

编辑看到代码后,我有点无言以对。

http://us3.php.net/manual/en/function.shuffle.php

答案 1 :(得分:1)

我会将默认值设置为函数内的所有变量,并将任何活动的参数传递给它。然后使用一组返回代码来指示成功或失败,或以某种方式验证结果并重新运行。

答案 2 :(得分:0)

我在这里同意Tyler Eaves,我想在编程中添加另一个非常重要的主题:

理论上“应该”的函数应该尽可能地标量,这意味着它不应该影响外部世界,并且每次都应该为相同的参数返回相同的信息。

如果在系统处于相同状态时调用带参数X,Y和Z的函数并再次调用它,该函数应返回完全相同的结果。

但是如果一个函数不是标量(例如Virtual),例如依赖于外部数据(文件,数据库行或单个实例可访问的类数据),那么理论上你不应该影响来自这个函数的外部数据,或者调用函数多次产生不同的结果...