【问题标题】:Two Array Queue Algorithm in phpphp中的两个数组队列算法
【发布时间】:2018-09-10 13:26:37
【问题描述】:

我有两个数组,想在 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

告诉我。提前致谢。

【问题讨论】:

  • 让您了解什么
  • 写在预期的结果中:- @u_mulder
  • 你知道,这里的人不为你写代码。如果您需要帮助 - 表现出一些努力。当你表现出努力时让我知道。
  • 需要什么信息?
  • 你有没有尝试过?您有尝试编写的代码吗?

标签: php queue


【解决方案1】:

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

$availables = [];
foreach ($array2 as $key => $value) {
  if ($value == 'A') $availables[] = $key;
}

现在我们有两个数组:$availables$array1 一个,我们需要将它们组合起来,其中一个代表键,另一个代表新数组的值。你可以用这个函数来做到这一点:

http://nl1.php.net/manual/en/function.array-combine.php

我们唯一需要注意的是数组的大小,所以:

$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);

见:https://eval.in/1056040

最好把它放在一个函数或方法中,这样数组的变化不会影响到原来的数组。

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

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

见:https://eval.in/1056044

【讨论】:

  • 请问如何获取数组1的最后一步?
  • 我不确定你的意思。但是,我把它全部放在一个函数中,并在这里打印出所有三个数组:eval.in/1056125
【解决方案2】:
foreach($array[1] as $key => $value){
    if($value === 'A') $array[2][$key] = $value;
}

【讨论】:

  • 虽然这段代码 sn-p 可以解决问题,但它没有解释为什么或如何回答这个问题。请include an explanation for your code,因为这确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
【解决方案3】:

我会这样做:

<?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;
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多