我有一个这样的数组:
array(
0 => array("src" => "foo-21.gif"),
1 => array("src" => "bar-short.gif"),
2 => array("src" => "baz-1.gif"),
3 => array("src" => "whatever.gif"),
4 => array("src" => "some-long.gif"),
5 => array("src" => "xyz.gif"),
);
src
元素中的值可以是任何值。
然而,只会有最大值。一个元素包含short
(这里是元素1)并且只有最大值。一个包含long
的元素(这里是元素4)。它们可以在阵列中的任何位置。或根本不存在。
我现在需要做的是:
src
包含short
的元素必须先出现long
的元素必须是最后一个所以这个例子看起来像这样:
array(
0 => array("src" => "bar-short.gif"), // containing "short" = first
1 => array("src" => "foo-21.gif"),
2 => array("src" => "baz-1.gif"),
3 => array("src" => "whatever.gif"),
4 => array("src" => "xyz.gif"),
5 => array("src" => "some-long.gif"), // containing "long" = last
);
我该怎么做? usort
在这里似乎不是一个好主意。
答案 0 :(得分:2)
usort()
实际上可以在这里工作得很好;如果第一个参数有“short”和/或第二个参数有“long”,则返回-1;如果反之,则返回1,如果两者都不是,则返回0(或者其他任何东西)。
答案 1 :(得分:2)
假设您的数组是$list
:
function short_long_sort($a, $b)
{
$short_str = '-short';
$long_str = '-long';
if (strpos($a['src'], $short_str)) return -1;
if (strpos($b['src'], $short_str)) return 1;
if (strpos($a['src'], $long_str)) return 1;
if (strpos($b['src'], $long_str)) return -1;
return 0;
}
usort($list, 'short_long_sort');
print_r($list);
答案 2 :(得分:0)
或者,如果您只是在输入时跟踪哪些元素有“短”和“长”,则不需要对任何内容进行排序,例如:
process($arr->[$short]);
for ($i=0; $i < @$arr; $i++) {
process($arr->[$i]) if (($i != $short) && ($i != $long));
}
process($arr->[$long]);