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)

我有一个关于php数组中的正确和快速搜索的问题

我有一个输入数组:

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
一开始什么都不是,但当你找到一个“正常”或“性感”的视频时,它将变成该视频,在随后的通话中,具有较高键的视频将获胜