Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.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_Queue - Fatal编程技术网

php中的双数组队列算法

php中的双数组队列算法,php,queue,Php,Queue,我有两个数组,希望在php中的第三个数组中有一个排队系统 Array 1 3 4 5 6 7 Array 2 24 => U //Unavailable 39 => A //Available 55 => A //Available 77 => A //Available 预期结果:- 所以在数组3中,我想要一个可用的 Array 3 39 => 3 55 => 4 77 => 5 此外,一旦将数组1中的数据分配给数组3,则应将其删除 Arr

我有两个数组,希望在php中的第三个数组中有一个排队系统

Array 1

3
4
5
6
7

Array 2

24 => U //Unavailable
39 => A //Available
55 => A //Available
77 => A //Available
预期结果:-

所以在数组3中,我想要一个可用的

Array 3

39 => 3
55 => 4
77 => 5
此外,一旦将数组1中的数据分配给数组3,则应将其删除

Array 1 should become

6
7

让我知道。提前谢谢。

我将从可用的
$array2
中的数字开始

foreach($array[1] as $key => $value){
    if($value === 'A') $array[2][$key] = $value;
}
$availables = [];
foreach ($array2 as $key => $value) {
  if ($value == 'A') $availables[] = $key;
}
现在我们有两个数组:
$availables
$array1
一个,我们需要组合它们,其中一个表示键,另一个表示新数组的值。您可以使用此功能执行此操作:

我们唯一需要注意的是阵列的大小,因此:

$size1 = count($array1);
$size2 = count($availables);
if ($size1 > $size2) $array1     = array_slice($array1,0,$size2);
if ($size2 > $size1) $availables = array_slice($availables,0,$size1);
然后我们可以将它们结合起来:

$array3 = array_combine($availables,$array1);
见:

最好将其放在函数或方法中,这样数组中的更改就不会影响原始数组

当然,还有很多其他方法可以完成最后两个步骤,例如:

$array3 = [];
foreach ($array1 as $key => $number)
{
  if (!isset($availables[$key])) break;
  $array3[$availables[$key]] = $number;
}

请参阅:

我会这样做:

<?php

$quee = range(1, 100);

$stations = ['1' => ['status' => 'A', 'client' => ''], '2' => ['status' => 'A', 'client' => ''], '3' => ['status' => 'U', 'client' => null], '4' => ['status' => 'A', 'client' => '']];

while ($quee) {
    foreach ($stations as $name => &$station) {
        if ($station['status'] === 'U') {
            echo 'Station ' . $name . ' is busy' . PHP_EOL;
            $station['status'] = 'A';
        } else {
            $station['status'] = 'U';
            $client = array_shift($quee);
            if ($client != null) {
                $station['client'] = $client;
                echo 'Im doing client ' . $client . ' on station ' . $name . PHP_EOL;
            } else {
                break;
            }
        }
    }
}

让你知道什么?它是以预期的结果编写的:-@u_Mulder你知道,这里的人不为你编写代码。如果你需要帮助,表现出一些努力。当你表现出努力时请告诉我。需要什么信息?你试过什么吗?您是否有试图编写的代码?虽然此代码片段可能会解决问题,但它没有解释为什么或如何回答问题。请,因为这确实有助于提高你的文章质量。请记住,您将在将来回答读者的问题,而这些人可能不知道您的代码建议的原因。请如何获得获取数组1的最后一步?我不确定您的意思。但是,我将其全部放在一个函数中,并在此处打印出所有三个数组: