-2

我存储了一系列 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()但它没有帮助。

4

5 回答 5

2

嗯,像这样的东西......

usort($array, function($a, $b) {
  $aKey = substr($a, 33, 10);
  $bKey = substr($b, 33, 10);
  return $aKey < $bKey;
}
//$array is sorted now
于 2013-01-31T12:54:44.760 回答
1

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

你需要的是:

于 2013-01-31T12:45:19.563 回答
1

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

于 2013-01-31T12:46:27.097 回答
1
<?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);

?>
于 2013-01-31T12:55:05.280 回答
1

试试这个(固定):

$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);
于 2013-01-31T12:50:50.490 回答