我有一个像这样的多维数组:
$array = array(
1 => array(
"name" => 'Jon',
"year" => '2012'
),
2 => array(
"name" => 'Jack',
"year" => '1900'
),
3 => array(
"name" => 'Lisa',
"year" => '1900'
),
4 => array(
"name" => 'Ygritte',
"year" => '1929'
),
);
所有年份为' 1900'应该放在数组的末尾。什么是轻量级解决方案?
期望的结果:
$array = array(
1 => array(
"name" => 'Jon',
"year" => '2012'
),
2 => array(
"name" => 'Ygritte',
"year" => '1929'
),
3 => array(
"name" => 'Jack',
"year" => '1900'
),
4 => array(
"name" => 'Lisa',
"year" => '1900'
),
);
答案 0 :(得分:1)
我认为您不关心索引,因为您重新排列它们。首先,你应该从0开始数组中的索引,而不是1。
您可以使用以下代码:
$array = array(
1 => array(
"name" => 'Jon',
"year" => '2012'
),
2 => array(
"name" => 'Jack',
"year" => '1900'
),
3 => array(
"name" => 'Lisa',
"year" => '1900'
),
4 => array(
"name" => 'Ygritte',
"year" => '1929'
),
);
$array = array_values($array);
for ($i=0, $c = count($array); $i<$c; ++$i) {
if ($array[$i]['year'] == '1900') {
$array[] = $array[$i];
unset($array[$i]);
}
}
$array = array_values($array);
foreach ($array as $k => $v) {
echo $k.' '.$v['name'].' '.$v['year']."<br />";
}
结果是:
0 Jon 2012
1 Ygritte 1929
2 Jack 1900
3 Lisa 1900
当然,如果你愿意,你可以改变你的键,每个键加1(从最后一个元素开始),所以你有相同的输出,但我认为这个对你来说已经足够了。
答案 1 :(得分:0)
最简单的方法可能是这样的: 找到具有1900年(迭代循环)的元素,然后
例如为索引3工作
$tmp = $myArray['3'];
unset($myArray['3'];
$myArray['3'] = $tmp;
$ tmp是循环内的临时变量。
答案 2 :(得分:0)
希望以下代码能为您提供帮助:
function aasort (&$array, $key) {
$sorter=array();
$ret=array();
reset($array);
foreach ($array as $ii => $va) {
$sorter[$ii]=$va[$key];
}
rsort($sorter);
foreach ($sorter as $ii => $va) {
$ret[$ii]=$array[$ii];
}
$array=$ret;
}
aasort($array,"year");
print_r($array);
答案 3 :(得分:0)
尝试使用SplHeap
class MyQueue extends SplHeap
{
public function compare($item1, $item2)
{
if ($item1['year'] === $item2['year']) return 0;
return ($item1['year'] == 1900) ? -1 : 0;
}
}
$queue = new MyQueue();
foreach ($array as $item) {
$queue->insert($item);
}
$queue->top();
$array = array();
while($queue->valid()){
$array[] = $queue->current();
$queue->next();
}
print_r($array);