【问题标题】:Sorting urls based on some value [closed]根据某些值对网址进行排序[关闭]
【发布时间】:2023-03-26 02:15:01
【问题描述】:

我存储了一系列 url。每个网址都有某种格式。我需要对 urls 数组进行排序。 喜欢

https://s3.amazonaws.com/photos/1358086239.jpg?response-content-type=image%2Fjpeg&AWSAccessKeyId=AKIAI2U3TRTNGXNCQHYQ&Expires=1359636889&Signature=l9GnekYT0wK9AznkPWWjBuCRgBY%3D
https://s3.amazonaws.com/photos/1358066630.jpg?response-content-type=image%2Fjpeg&AWSAccessKeyId=AKIAI2U3TRTNGXNCQHYQ&Expires=1359636889&Signature=l9GnekYT0wK9AznkPWWjBuCRgBY%3D

这些 url 由 amazon S3 PHP SDK get_object_url 方法转发。

我有 1000 个这样的 url,但我想根据 1358086239.jpg 值对这些 url 进行排序,这个值每次都是整数值,我想根据这个值按 Asc 顺序对 url 进行排序。

如何对这些 urls 数组进行排序。我尝试使用 php 内置函数 ksort() 但它没有帮助。

【问题讨论】:

  • 去掉前导 URL(总是一样?)然后按结果值排序。
  • 提示:Jan Hancic 的答案(请原谅,但我的键盘上没有重音符号 =)评论是 not:我该怎么做?正确的答案是:我试过这个,它以这种方式失败,我做错了什么?
  • 如果[0-9]+.jpg 之前的所有内容始终相同,那么您将期望能够对整个内容进行排序并获得正确的结果。为什么这不起作用?

标签: php arrays sorting amazon-s3


【解决方案1】:

尝试遍历 URL 并将它们中的每一个分配到数组中,其中 key 是文件名中的数字。然后简单地按键排序,然后......你就完成了!

你需要的是:

【讨论】:

    【解决方案2】:

    sed 's/photos\/\([0-9]+.jpg\)/\1/' | sort 会按顺序给出文件名。 grep -f 将其作为第一个输入,将 URL 作为第二个输入将产生您想要的输出。

    【讨论】:

      【解决方案3】:

      试试这个(固定):

      $urls = array(
      'https://s3.amazonaws.com/photos/1358086239.jpg?response-content-type=image%2Fjpeg&AWSAccessKeyId=AKIAI2U3TRTNGXNCQHYQ&Expires=1359636889&Signature=l9GnekYT0wK9AznkPWWjBuCRgBY%3D',
      'https://s3.amazonaws.com/photos/1358066630.jpg?response-content-type=image%2Fjpeg&AWSAccessKeyId=AKIAI2U3TRTNGXNCQHYQ&Expires=1359636889&Signature=l9GnekYT0wK9AznkPWWjBuCRgBY%3D',
      );
      
      
      $list = array();
      foreach ($urls as $v) {
         $tmp = explode('https://s3.amazonaws.com/photos/', $v);
         $tmp = explode('.jpg?response-content', $tmp[1]);
      
         $list[$tmp[0]] = $v;
      } 
      
      ksort($list);
      
      var_dump($list);
      

      【讨论】:

      • 我试过这个,但是当我 print_r($list);它什么也没显示。
      • 已修复。我第一次这样做是出于记忆力:)
      【解决方案4】:

      嗯,是这样的……

      usort($array, function($a, $b) {
        $aKey = substr($a, 33, 10);
        $bKey = substr($b, 33, 10);
        return $aKey < $bKey;
      }
      //$array is sorted now
      

      【讨论】:

        【解决方案5】:
        <?php
        $url_array  = array('https://s3.amazonaws.com/photos/1358086239.jpg?response-content-type=image%2Fjpeg&AWSAccessKeyId=AKIAI2U3TRTNGXNCQHYQ&Expires=1359636889&Signature=l9GnekYT0wK9AznkPWWjBuCRgBY%3D', 'https://s3.amazonaws.com/photos/1358066630.jpg?response-content-type=image%2Fjpeg&AWSAccessKeyId=AKIAI2U3TRTNGXNCQHYQ&Expires=1359636889&Signature=l9GnekYT0wK9AznkPWWjBuCRgBY%3D');
        $res_aray = array();
        foreach($url_array as $val){
           preg_match('/photos\/(?P<numb>\d+)\.jpg/', $val, $matches);   
           $res_aray[$matches['numb']] = $val;
        }
        ksort($res_aray);
        print_r($res_aray);
        
        ?>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-16
          • 2022-08-20
          • 2016-12-27
          • 1970-01-01
          • 1970-01-01
          • 2019-09-04
          相关资源
          最近更新 更多