Php 阵列中的正确快速搜索问题
我有一个关于php数组中的正确和快速搜索的问题 我有一个输入数组:Php 阵列中的正确快速搜索问题,php,arrays,Php,Arrays,我有一个关于php数组中的正确和快速搜索的问题 我有一个输入数组: array (size=2) 0 => array (size=7) 'Videos' => array (size=2) 240 => array (size=2) ... 120 => array (size=2)
array (size=2)
0 =>
array (size=7)
'Videos' =>
array (size=2)
240 =>
array (size=2)
...
120 =>
array (size=2)
...
'Texts' =>
array (size=0)
empty
'Price' => float 0
'QaAudio' => int 1
'QaVideo' => int 3
'Level' => string 'normal' (length=6)
'PreviewPic' =>
array (size=7)
40 =>
array (size=12)
...
60 =>
array (size=12)
...
140 =>
array (size=12)
...
160 =>
array (size=12)
...
320 =>
array (size=12)
...
640 =>
array (size=12)
...
1024 =>
array (size=12)
...
1 =>
array (size=7)
'Videos' =>
array (size=3)
480 =>
array (size=2)
...
360 =>
array (size=2)
...
120 =>
array (size=2)
...
'Texts' =>
array (size=0)
empty
'Price' => float 0
'QaAudio' => int 1
'QaVideo' => int 3
'Level' => string 'sexy' (length=4)
'PreviewPic' =>
array (size=7)
40 =>
array (size=12)
...
60 =>
array (size=12)
...
140 =>
array (size=12)
...
160 =>
array (size=12)
...
320 =>
array (size=12)
...
640 =>
array (size=12)
...
1024 =>
array (size=12)
...
我需要在其中找到视频,它在视频键中具有最大值(如示例中所示,它具有360240120个值),并且具有等于“正常”或“性感”值的级别键
我写了一些方法:
public function getPresentationVideo($id)
{
$result = [];
$notHardVideos = [];
$profileVideos = $this->getProfilesVideos($id,0,50);
if ($profileVideos && count($profileVideos) > 0) {
foreach ($profileVideos as $video) {
if (in_array($video['Level'],['normal','sexy'])) {
$video['maxVideoQuality'] = max(array_keys($video['Videos']));
$notHardVideos[] = $video;
}
}
$keyForMaxQuality = 0;
if (count($notHardVideos) > 1) {
$maxQuality = 0;
foreach($notHardVideos as $key => $video) {
if($video['maxVideoQuality'] > $maxQuality)
{
$maxQuality = $video['maxVideoQuality'];
$keyForMaxQuality = $key;
}
}
}
if (count($notHardVideos) > 0) {
$result = $notHardVideos[$keyForMaxQuality];
unset($result['maxVideoQuality']);
}
}
return $result;
}
它做得很好
但我想知道有没有更有效的方法来做到这一点。
你有什么想法吗
提前谢谢
$result = array_reduce($videos, function ($result, array $video) {
if (!in_array($video['Level'], ['normal', 'sexy'])) {
return $result;
}
if (!$result) {
return $video;
}
if (max(array_keys($video['Videos'])) > max(array_keys($result['Videos']))) {
return $video;
}
return $result;
});
这将返回具有“正常”或“性感”级别(顺便说一句,FTW?!)且在其“视频”子数组中具有最高键的子数组。它不包括任何其他考虑因素,就像您在代码中看到的那样,因为您没有明确指定这些考虑因素是什么。但是,您应该了解这个想法,如果需要,可以添加更多检查
有关此功能的帮助,请参阅。简而言之,这将依次获取数组中的每个元素,并将其与之前的最佳候选元素进行比较。也就是说,$result
一开始什么都不是,但当你找到一个“正常”或“性感”的视频时,它将变成该视频,在随后的通话中,具有较高键的视频将获胜