Алгоритм очереди двух массивов в php - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть два массива, и я хочу иметь систему очередей в третьем массиве в 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

Дайте мне знать. Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 10 сентября 2018

Я бы начал с доступных чисел от $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

0 голосов
/ 10 сентября 2018

Я бы сделал что-то вроде этого:

<?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;
            }
        }
    }
}
0 голосов
/ 10 сентября 2018
foreach($array[1] as $key => $value){
    if($value === 'A') $array[2][$key] = $value;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...