2013-02-26 106 views
-1

这可能没有多大意义。我想知道是否有任何值可以放入数组中并对其进行排序,并且它会在所有否定条目之前或所有正数条目之后出现。负值之前和之后的PHP值

$keys = array('m1' => 1, -500 => 1, 0 => 1, 1000 => 1, 'm' => 1, 5000 => 1,); 

    foreach($keys as $k => $v){ 
    echo $k . '<br />'; 
} 

返回

-500 
    m 
    0 
    m1 
    1000 
    5000 

回答

2
<? 

$keys = array('m1' => 1, -500 => 1, 0 => 1, 1000 => 1, 'm2' => 1, 5000 => 1,); 

ksort($keys, SORT_STRING); 

foreach($keys as $k => $v){ 
    echo $k . '<br />'; 
} 

?> 

返回结果:

-500 
0 
1000 
5000 
m1 
m2 

请务必保持所有小写的字符串键,如果你以正确的顺序希望他们。这将把所有整数后的字符串。

继承人的方法的例子:http://codepad.org/IBc3wnso

我能想到的简单先得到你的非int键的唯一途径,是--前缀他们:

<? 

$keys = array('--m2' => 1, -500 => 1, 0 => 1, 1000 => 1, '--m1' => 1, 5000 => 1,); 

ksort($keys, SORT_STRING); 

foreach($keys as $k => $v){ 
    echo $k . "\n"; 
} 

?> 

将返回:

--m1 
--m2 
-500 
0 
1000 
5000 

例如:http://codepad.org/rwbrj3rJ

虽然这有点破绽。可能有更好的方法来实现这一点。

+0

我从来没有尝试过,因为它说这是它用来排序的默认方法。任何你知道这种事情的机会都会被排除在负面价值之后。 IE米,-500,0 ....我正在寻找什么M将需要是在该顺序​​。我已经尝试了类似-m的东西,然而它的值介于-500和0之间。 – Iscariot 2013-02-26 16:12:48

+0

您可以随时将其倒转并使用krsort,但是所有的键都会倒退,即'm2,m1,500,0,-500' – BenOfTheNorth 2013-02-26 16:15:08

+0

不幸的是在这种情况下,我需要能够在-500之前下降。我所展示的清单是实际清单的1/1000。我可能会想出一些东西,但我正在尽量减少处理。 – Iscariot 2013-02-26 16:16:27

0

如果你想单字符作为数组键,尝试CHR(0)和CHR(255)。

等一下:如果您不断更改问题,则很难回复。

你有-500作为关键:这不是一个字符。

然后,对于较低的值使用-PHP_INT_MAX,对于较高的值使用PHP_INT_MAX。

+0

我在说单个字符。你可以使用数组键。 – Iscariot 2013-02-26 15:22:29

+0

我假设值=整数。 – Ghigo 2013-02-26 15:27:06