Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 字符串到数组的转换、数组的随机、取消设置以及返回到数组到字符串。有捷径吗?_Php_Mysql_Arrays_String - Fatal编程技术网

Php 字符串到数组的转换、数组的随机、取消设置以及返回到数组到字符串。有捷径吗?

Php 字符串到数组的转换、数组的随机、取消设置以及返回到数组到字符串。有捷径吗?,php,mysql,arrays,string,Php,Mysql,Arrays,String,我正在为一个电话呼叫页面编程一个时间表。我正在编写的一个函数在选定时间获取可用助手(另存为助手ID)随机选取一个,将其从列表中删除,并更新表。非常直接。 我已经为它编写了代码,它工作得非常好,但是,这段代码使用了很多函数来完成这个过程。我觉得我好像在用右脚抓我的左耳是否有一个快捷方式可以访问所有这些代码,从而在将来为服务器节省大量处理时间 $assistants = self::get_avail_assists($table, $this->time); //Assist

我正在为一个电话呼叫页面编程一个时间表。我正在编写的一个
函数
在选定时间获取可用助手(另存为助手ID)随机选取一个,将其从列表中删除,并更新表。非常直接。

我已经为它编写了代码,它工作得非常好,但是,这段代码使用了很多函数来完成这个过程。我觉得我好像在用右脚抓我的左耳

是否有一个快捷方式可以访问所有这些代码,从而在将来为服务器节省大量处理时间

$assistants = self::get_avail_assists($table, $this->time);
        //Assistants are saved as ids and each one is 18 Char.
        //each one separated with a space
        $assistants_no = strlen($assistants);
            if($assistants_no > 1){
                for($i=0; $i<$assistants_no; $i=$i+18){
                    $assistants_array[$i/18] = substr($assistants,$i,17);
                }
            }

        //select random assistant key
        $rand_assistant_key = array_rand($assistants_array);
        //retrieve selected assistant
        $rand_assistant = $assistants_array[$rand_assistant_key];
        //delete selected assistant from list
        unset($assistants_array[$rand_assistant_key]);

        //clear assistants string
        $assistants = "";
        //recreate assistants string to update
        foreach($assistants_array as $assistant){
            $assistants .= $assistant." ";
        }
        //update database after popping out the random assistant
        $sql = "UPDATE ".$table." SET ".
        "avail_assists='".$assistants."' ".
        "WHERE id='".$this->time."' ".
        "LIMIT 1";
        mysqli_query($sql,etc...
$assistants=self::get\u avail\u assists($table,$this->time);
//助手保存为ID,每个ID为18个字符。
//每一个都用一个空格隔开
$assistants_no=strlen($assistants);
如果($u no>1){
对于($i=0;$itime)。”。
“限制1”;
mysqli_查询($sql等)。。。

感谢您抽出时间!

假设助理重新输入数据库的顺序无关紧要

$ass_array=explode(" ",$assistants);  // space-separated string to array

shuffle($ass_array);    // mix it up
$lucky_ass=$ass_array[0];   // save one for whatever usage
unset($ass_array[0]);  // remove the one from the group

$leftover_string_of_asses=implode(' ',$ass_array);  // convert array to space-separated string

...add sql query

如果ID不包含空格,则可以使用,而不是循环。如果不使用,还可以询问为什么要保存
$rand\u assistant
。保存为存储在variable@bassxzero谢谢你的评论。现在
explode
函数肯定会保存一些循环。我使用的是
rand\u助手
为了公平起见,所有的助手和变量都将
返回到调用函数中。您以这种方式存储数据有什么原因吗?正如我所想的,如果您使用表将每个id存储在一行中,而不是将所有id打包到一行中。这会使事情变得更简单。然后您只需查询对于可以通过sql完成的随机行,然后将结果设置为您的随机助手,并启动另一个查询以从表中删除该id。但这将需要在表中以非常不同的方式存储数据,因此我不知道是否可以这样做。@KitRamos
包含一个
id
时间戳of选定的时间段和
avail\u在该时间戳协助助手的id。因此,要按照您的建议执行,需要将
更改为
id
时间戳
,以及
助手
。因此,基本上可以用更少的处理来增加行数。这看起来确实是代码的最终捷径。th非常感谢你的时间。附言:我喜欢你称他们为蠢货的方式:不客气。很高兴能帮上忙。(…是的,我无法控制变量命名)