Tengo dos matrices y quiero tener un sistema de colas en la tercera matriz en php

Array 1

3
4
5
6
7

Array 2

24 => U //Unavailable
39 => A //Available
55 => A //Available
77 => A //Available

Resultado esperado: -

Entonces en Array 3 quiero el que está disponible

Array 3

39 => 3
55 => 4
77 => 5

Además, los datos de la matriz 1 deben eliminarse una vez que se asignan a la matriz 3.

Array 1 should become

6
7

Házmelo saber. Gracias por adelantado.

-2
Anita Mourya 10 sep. 2018 a las 16:26

3 respuestas

La mejor respuesta

Comenzaría con los números de $array2 que están disponibles.

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

Ahora tenemos dos matrices: $availables y $array1 una, y necesitamos combinarlas donde una representa las claves y la otra los valores de la nueva matriz. Harías esto con esta función:

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

De lo único que debemos tener cuidado es del tamaño de las matrices, así que:

$size1 = count($array1);
$size2 = count($availables);
if ($size1 > $size2) $array1     = array_slice($array1,0,$size2);
if ($size2 > $size1) $availables = array_slice($availables,0,$size1);

Y luego podemos combinarlas:

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

Ver: https://eval.in/1056040

Sería mejor poner esto en una función o método, para que los cambios en las matrices no afecten a las matrices originales.

Por supuesto, hay muchas otras formas de hacer los dos últimos pasos, por ejemplo:

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

Ver: https://eval.in/1056044

1
KIKO Software 10 sep. 2018 a las 19:50

Haría algo como esto:

<?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
Eakethet 10 sep. 2018 a las 14:12
foreach($array[1] as $key => $value){
    if($value === 'A') $array[2][$key] = $value;
}
0
Federico klez Culloca 10 sep. 2018 a las 13:36