将具有特定值的元素移动到维度数组的末尾

  • 本文关键字:数组 移动 元素 php arrays
  • 更新时间 :
  • 英文 :


原始阵列

$sonuc['rec'][0]['m_unseen'] = 1;
$sonuc['rec'][0]['user_id'] = 234;
$sonuc['rec'][0]['id'] = 133;
$sonuc['rec'][0]['last_updated'] = date();
$sonuc['rec'][0]['user']['unseen'] = 0;
$sonuc['rec'][0]['user']['id'] = 234;
$sonuc['rec'][1]['m_unseen'] = 0;
$sonuc['rec'][1]['user_id'] = 234;
$sonuc['rec'][1]['id'] = 134;
$sonuc['rec'][1]['last_updated'] = date();
$sonuc['rec'][1]['user']['unseen'] = 0;
$sonuc['rec'][1]['user']['id'] = 234;
$sonuc['rec'][2]['m_unseen'] = 0;
$sonuc['rec'][2]['user_id'] = 234;
$sonuc['rec'][2]['id'] = 135;
$sonuc['rec'][2]['last_updated'] = date();
$sonuc['rec'][2]['user']['unseen'] = 0;
$sonuc['rec'][2]['user']['id'] = 234;
$sonuc['rec'][3]['m_unseen'] = 1;
$sonuc['rec'][3]['user_id'] = 234;
$sonuc['rec'][3]['id'] = 136;
$sonuc['rec'][3]['last_updated'] = date();
$sonuc['rec'][3]['user']['unseen'] = 0;
$sonuc['rec'][3]['user']['id'] = 234;

预期结果

$sonuc['rec'][0]['m_unseen'] = 1;
$sonuc['rec'][0]['user_id'] = 234;
$sonuc['rec'][0]['id'] = 133;
$sonuc['rec'][0]['last_updated'] = date();
$sonuc['rec'][0]['user']['unseen'] = 0;
$sonuc['rec'][0]['user']['id'] = 234;
$sonuc['rec'][1]['m_unseen'] = 1;
$sonuc['rec'][1]['user_id'] = 234;
$sonuc['rec'][1]['id'] = 136;
$sonuc['rec'][1]['last_updated'] = date();
$sonuc['rec'][1]['user']['unseen'] = 0;
$sonuc['rec'][1]['user']['id'] = 234;
$sonuc['rec'][2]['m_unseen'] = 0;
$sonuc['rec'][2]['user_id'] = 234;
$sonuc['rec'][2]['id'] = 134;
$sonuc['rec'][2]['last_updated'] = date();
$sonuc['rec'][2]['user']['unseen'] = 0;
$sonuc['rec'][2]['user']['id'] = 234;
$sonuc['rec'][3]['m_unseen'] = 0;
$sonuc['rec'][3]['user_id'] = 234;
$sonuc['rec'][3]['id'] = 135;
$sonuc['rec'][3]['last_updated'] = date();
$sonuc['rec'][3]['user']['unseen'] = 0;
$sonuc['rec'][3]['user']['id'] = 234;

我正在尝试将m_invision值为0的所有元素移动到数组的末尾。

我试过了,但没有得到预期的结果

function moveElement(&$array, $a, $b) {
$out = array_splice($array, $a, 1);
array_splice($array, $b, 0, $out);
}
$keys = array_keys(array_column($sonuc['rec'], 'm_unseen'), 0);
foreach ($keys as $key) {
moveElement($sonuc['rec'], $key, $say);
}

知道吗?

您可以使用带有自定义回调的usort函数来完成此操作
此函数接受两个参数,数组(通过引用传递(和一个带有两个元素的回调。您可以比较回调中的两个元素。

在这里,我们简单地将一个"m_invisive"减去另一个,因为它们是数字。如果是另一种类型,我们需要返回一个正整数或负整数,或者如果它们相等,则返回0,因为这是usort函数所期望的。

<?php
$sonuc = array();
$sonuc['rec'][0]['m_unseen'] = 1;
$sonuc['rec'][0]['user_id'] = 234;
$sonuc['rec'][0]['id'] = 133;
$sonuc['rec'][0]['last_updated'] = date(1584796457);
$sonuc['rec'][0]['user']['unseen'] = 0;
$sonuc['rec'][0]['user']['id'] = 234;
$sonuc['rec'][1]['m_unseen'] = 0;
$sonuc['rec'][1]['user_id'] = 234;
$sonuc['rec'][1]['id'] = 134;
$sonuc['rec'][1]['last_updated'] = date(1584796457);
$sonuc['rec'][1]['user']['unseen'] = 0;
$sonuc['rec'][1]['user']['id'] = 234;
$sonuc['rec'][2]['m_unseen'] = 0;
$sonuc['rec'][2]['user_id'] = 234;
$sonuc['rec'][2]['id'] = 135;
$sonuc['rec'][2]['last_updated'] = date(1584796457);
$sonuc['rec'][2]['user']['unseen'] = 0;
$sonuc['rec'][2]['user']['id'] = 234;
$sonuc['rec'][3]['m_unseen'] = 1;
$sonuc['rec'][3]['user_id'] = 234;
$sonuc['rec'][3]['id'] = 136;
$sonuc['rec'][3]['last_updated'] = date(1584796457);
$sonuc['rec'][3]['user']['unseen'] = 0;
$sonuc['rec'][3]['user']['id'] = 234;
usort($sonuc['rec'], function($a, $b) {
// switching the variable here would order the array ASC rather than DSC.
return $b['m_unseen'] - $a['m_unseen'];
});
var_dump($sonuc);

这里有一个沙盒供您测试

usort带有自定义排序功能就足够了:

usort($sonuc['rec'], function($a, $b) {
return 1 == $a['m_unseen'] ? -1 : 1;
});

您可以简单地将具有非零值的m_unseen移到前面,在指针变量的帮助下将零值交换到后面。

<?php
$ptr = 0;
foreach($sonuc['rec'] as $key => $value){
if($value['m_unseen'] != 0){
$temp = $sonuc['rec'][$ptr];
$sonuc['rec'][$ptr++] = $value;
$sonuc['rec'][$key] = $temp;
}
}

演示:https://3v4l.org/o1c5R

最新更新