我从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
)
删除其他项目
提前致谢
干杯
史蒂芬
答案 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。