我有一个看起来像这样的数组:
Array (
[0] => Array (
num => 09989,
dis => 20
)
[1] => Array (
num => 09989,
dis => 10
)
[2] => Array (
num => 56676,
dis => 15
)
[3] => Array (
num => 44533,
dis => 20
)
[4] => Array (
num => 44533,
dis => 50
)
)
首先,我正在尝试按num对它们进行排序,似乎无法从php.net中获取usort示例。它似乎不是排序...我也试图删除数组元素,如果它是重复的和,其dis值高于另一个。
所以,根据上面的例子,我正在尝试创建:
Array (
[0] => Array (
num => 09989,
dis => 10
)
[1] => Array (
num => 44533,
dis => 20
)
[2] => Array (
num => 56676,
dis => 15
)
)
这是来自php.net的代码:
function cmp($a, $b)
{
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
答案 0 :(得分:2)
在比较函数中,$a
和$b
都是数组的项目。要按 num 对项目进行排序,请使用:
function cmp($a, $b) {
if ($a['num'] == $b['num']) {
return 0;
}
return ($a['num'] < $b['num']) ? -1 : 1;
}
按 num 排序,然后按 dis 排序,请使用:
function cmp($a, $b) {
if ($a['num'] == $b['num']) {
if ($a['dis'] == $b['dis']) {
return 0;
}
return ($a['dis'] < $b['dis']) ? -1 : 1;
}
return ($a['num'] < $b['num']) ? -1 : 1;
}
对数组进行排序后,您可以使用以下内容过滤带有重复 num 的项目:
for ($i=1, $j=0, $n=count($array); $i<$n; ++$i) {
if ($array[$i]['num'] == $array[$j]['num']) {
unset($array[$i]);
} else {
$j = $i;
}
}
一切都在一起:
$array = array(
array('num' => '09989', 'dis' => '20'),
array('num' => '09989', 'dis' => '10'),
array('num' => '56676', 'dis' => '15'),
array('num' => '44533', 'dis' => '20'),
array('num' => '44533', 'dis' => '50')
);
function cmp($a, $b) {
if ($a['num'] == $b['num']) {
if ($a['dis'] == $b['dis']) {
return 0;
}
return ($a['dis'] < $b['dis']) ? -1 : 1;
}
return ($a['num'] < $b['num']) ? -1 : 1;
}
usort($array, 'cmp');
for ($i=1, $j=0, $n=count($array); $i<$n; ++$i) {
if ($array[$i]['num'] == $array[$j]['num']) {
unset($array[$i]);
} else {
$j = $i;
}
}
var_dump($array);
答案 1 :(得分:1)
排序:
__retry:
for ($j=1; $j < sizeof($your_array[$i]); $j++)
{
if (cmp($your_array[$i][$j-1],$your_array[$i][$j])) // your written cmp for your object structure
{
$temp = $your_array[$i][$j-1];
$your_array[$i][$j-1] = $your_array[$i][$j];
$your_array[$i][$j] = $temp;
goto __retry;
}
}
你的比较功能:
function cmp($a, $b)
{
return $a['num'] < $b['num'];
}
删除相同:
__retry:
for (%j=1; $j < sizeof($your_array[$i]); $j++)
{
if (!cmp($your_array[$i][$j-1],$your_array[$i][$j]) && !cmp($your_array[$i][$j],$your_array[$i][$j-1]))
{
$temp = $your_array[$i][$j-1] = array_pop($your_array[$i]);
}
}
答案 2 :(得分:0)
答案 3 :(得分:0)
$firstArray=array(5,6,7,7,1,6,1,5);
//sort the first array
sort($firstArray);
print_r($firstArray);
//get the number of elements
$arrayCount=count($firstArray);
//create a second array
$secondArray=array();
//copy the first item to the second array
array_push($secondArray,$firstArray[0]);
//copy into the second array if there is not twice the same item
for ($j=1;$j<$arrayCount;$j++)
{
if($firstArray[$j-1]!=$firstArray[$j]) array_push($secondArray,$firstArray[$j]);
}
//that's all!
print_r($secondArray);