尝试将数组减少到数组中的最小选项

时间:2017-09-20 09:53:26

标签: php arrays sorting

我从SOAP查询中提取可用性数据。它将进入一个排序的数组,然后通过lightslider

显示

问题是我们显示的项目通常是三分之一:基本,标准和高级(但并非总是)

我需要一种方法将数组(或输出)减少到三个可能选项中的最小值

对数组排序的数组输入如下所示:(较大数组的片段)

Array
(
       [WS_UTRUnitType] => Array
            (
                [0] => ALASA108.00 P
                [1] => ALASA11.50 B
                [2] => ALASA11.50 P
                [3] => ALASA11.50 S
                [4] => ALASA13.50 B
                [5] => ALASA13.50 P
                [6] => ALASA13.50 S
                [7] => ALASA15.75 P
                [8] => ALASA15.75 S
    )
      [WS_UTMonthlyRate] => Array
          (
            [0] => 650
            [1] => 139
            [2] => 149
            [3] => 145
            [4] => 159
            [5] => 169
            [6] => 165
            [7] => 175
            [8] => 170
       )
.
.
.

在这种情况下,我只希望B's可用,S's如果B's不存在

希望我在这里有意义:))

更新:数组的其余部分也会更新以删除相应的项目

对数组进行排序后,将通过循环输出信息

<ul id="image-gallery" class="gallery list-unstyled cS-hidden">
                    <?php for ($i = 0; $i < $count; $i++) {?>
                    <?php if ($sorted['WS_UTNoVacant'][$i] != "0") { // this only displays items that are available
...display the array data
}

最好在开始时或显示期间进行数据选择。

我正在寻找的输出是一个修正的数组,只包含所需的项目。对于上面的例子,输出将是

[WS_UTRUnitType] => Array
        (
            [0] => ALASA108.00 P
            [1] => ALASA11.50 B
            [4] => ALASA13.50 B
            [8] => ALASA15.75 S
)

删除其他项目

提前致谢

干杯

史蒂芬

1 个答案:

答案 0 :(得分:0)

您可以使用覆盖相同键值的array_combine副作用。为此,我们必须首先以正确的方式对数组进行排序。 B应该S之后S P之后$rank = [ 'B' => 1, 'S' => 2, 'P' => 3, ]; usort($array, function ($a, $b) use ($rank) { list($baseA, $suffixA) = explode(' ', $a); list($baseB, $suffixB) = explode(' ', $b); return $baseA === $baseB ? $rank[$suffixB] - $rank[$suffixA] : strcmp($baseA, $baseB); }); {/ 1}}

$result = array_values(
    array_combine(
        array_column(array_map(function ($element) {
            return explode(' ', $element);
        }, $array), 0), 
        $array
    )
);

然后我们将创建一个关联数组并仅从中获取值:

T1                          T2
----------                  -----------
A   B   C                   A    B   D
1   4   7                   1    4   8
2   5   3                   2    9   5
4   7   1                   7    3   2

这是working demo