我有以下数组:
$array = array(
        'note' => array(),'year' => array('2011','2010','2012'),'type' => array('conference','journal','conference'),);

我使用以下函数使用字段类型和另一个数组对数组进行排序:

function array_multisort_by_order(array $array,$by,array $order)
{
    $order = array_flip($order);
    $params[] = $array[$by];
    foreach($params[0] as &$v) $v = $order[$v];
    foreach($array as &$v) $params[] = &$v; unset($v);
    call_user_func_array('array_multisort',$params);
    return $array;
}

当我调用以下函数时,我收到以下错误:

$array = array_multisort_by_order($array,'type',array('conference','journal'));

print_r($array['type']);

错误:

Warning: array_multisort(): Array sizes are inconsistent.

我知道数组是不一致的.有更好的功能使用吗?

请检查:codepad

期望的输出:

Array
(
[note] => Array
    (
        [0] => 
        [1] => 
        [2] => 
    )

[year] => Array
    (
        [0] => 2011
        [1] => 2012
        [2] => 2010
    )

[type] => Array
    (
        [0] => conference
        [1] => conference
        [2] => journal
    )

)

例2:

排列

$array = array(
        'note' => array([0]=>'test1',[1]=>'test2'),'year' => array([0]=>'2011',[2]=>'2012'),'type' => array([0]=>'conference',[1]=>'journal',[2]=>'conference'),);

期望的结果2

Array
(
[note] => Array
    (
        [0] => test1
        [1] => 
        [2] => tes2
    )

[year] => Array
    (
        [0] => 2011
        [1] => 2012
        [2] => 
    )

[type] => Array
    (
        [0] => conference
        [1] => conference
        [2] => journal
    )

)

谢谢

好的,首先想到的解决方案之一就是添加空值以使它们保持一致:
function array_multisort_by_order(array $array,array $order)
{
     $max = max(array_map('count',$array));
    //or,alternatively,depending on input (if there are no 'complete' subarrays):
    //$max = max(array_map(function($arr){return max(array_keys($arr));},$array))+1;

    //ADDITION: negative numeric keys:
    $min = min(array_map(function($arr){return min(array_keys($arr));},$array));
    $width = $max - min(0,$min);

    foreach($array as &$sub){
        // $addin = array_diff_key(array_fill(0,$max,null),$sub);
        // $addin changed for negative keys:
        $addin = array_diff_key(array_combine(range($min,$max),array_fill(0,$width,null)),$sub);
        $sub = $addin + $sub;
        ksort($sub);
    }
    $order = array_flip($order);
    $params[] = $array[$by];
    foreach($params[0] as &$v) $v = $order[$v];
    foreach($array as &$v) $params[] = &$v; unset($v);
    call_user_func_array('array_multisort',$params);
    //no closeures here:
    //foreach($array as &$sub) $sub = array_filter(function($a){return !is_null($a);},$sub);
    $filter = create_function('$a','return !is_null($a);');
    foreach($array as &$sub) $sub = array_filter($sub,$filter);
    return $array;
}

php – 使用array_multisort对数组进行排序的更多相关文章

  1. 从iOS应用程序发送帖子到PHP脚本不工作…简单的解决方案就像

    我之前已经做了好几次了但是由于某些原因我无法通过这个帖子…我尝试了设置为_POST且没有的变量的PHP脚本……当它们未设置为发布时它工作精细.这是我的iOS代码:这里是PHP的一大块,POST变量不在正确的位置?我想这对于更有经验的开发人员来说是一个相当简单的答案,感谢您的帮助!解决方法$_POST是一个数组,而不是一个函数.您需要使用方括号来访问数组索引:

  2. swift学习2 元组 tuples

    swift中出现了一种新的数据结构,非常牛掰的元组tuples如果懂PHP的猿,会发现这个元组和PHP的数组非常类似,同样是可以默认不指定key,也可以指定key目前的学习疑问是,如何进行元组的遍历?

  3. swift 5. 数组

    swift5.数组标签:swift妈蛋,真不容易啊,终于要说集合了。swift中还有一种申明数组的方式,是申明一个空数组,或者叫先申明一个数组,给它附上空值。你不是说swift中的数组是严格要求类型的吗?javascript中,和swift很像1.求数组大小swift中也是用count来求数组大小,但是它是个数组的一个属性值,不是一个函数方法。swift里也有这样一个方法函数append(),它是一个数组对象的一个方法,可以向这个数组后添加成员。以后也会说到:14.数组比较swift中数组比较用==。

  4. 13.9 Swift必须构造方法

    /**必须构造器比较新鲜的概念,之所以说是比较新的概念呢,是因为这个是早期的版本中没有这样一个概念啊?构造方法所属的类的后续子类必须也得实现这个构造方法。

  5. 尝试使用swift mailer,gmail smtp,php发送邮件

    这里是我的代码:在运行时出现此错误…

  6. 数组 – 封闭平面嵌套对象?

    我开始学习闭包,并希望在我正在开发的项目中实现它们,我想要一些帮助.我有一个类定义如下:我想使用闭包或更高级的函数来展平[MyObject]并将所有MyObject和subOjects连接成一个数组.我尝试使用[MyObject].flatMap(),但此操作不返回嵌套的子对象.展平递归类结构的一种方法是使用递归函数.这是我们想要展平的课程:以下是演示如何完成此操作的函数:这种方法的核心是recursiveFlat本地函数.它将嵌套对象的内容附加到结果中,然后有条件地为每个元素调用自身以添加其内容.

  7. 在Android上调试时,RxJava缓存线程中的InterruptedException

    有时当我调试我的应用程序时,我在RxCachedThreadScheduler-1中遇到InterruptedException.这是跟踪:我有一个自定义视图,我在其中订阅我的observable,如下所示:这是可观察的:其中eventSubject是一个简单的PublishSubject.我使用RxAndroid1.1.0和RxJava1.1.0.有谁知道为什么会这样?解决方法我不确定,为什么会

  8. android – PopupWindow z排序

    我使用PopupWindow播放菜单,它与EditText重叠.它工作正常,除了我的PopupWindow与EditTextIME系统中的某些项目重叠.我的问题是:如何强制我的PopupWindow的z顺序,使它出现在这些装饰上方?

  9. PHP使用JpGraph绘制折线图操作示例【附源码下载】

    这篇文章主要介绍了PHP使用JpGraph绘制折线图操作,结合实例形式分析了php使用JpGraph的相关操作技巧与注意事项,并附带源码供读者下载参考,需要的朋友可以参考下

  10. jQuery的Cookie封装,与PHP交互的简单实现

    下面小编就为大家带来一篇jQuery的Cookie封装,与PHP交互的简单实现。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

随机推荐

  1. PHP个人网站架设连环讲(一)

    先下一个OmnihttpdProffesinalV2.06,装上就有PHP4beta3可以用了。PHP4给我们带来一个简单的方法,就是使用SESSION(会话)级变量。但是如果不是PHP4又该怎么办?我们可以假设某人在15分钟以内对你的网页的请求都不属于一个新的人次,这样你可以做个计数的过程存在INC里,在每一个页面引用,访客第一次进入时将访问时间送到cookie里。以后每个页面被访问时都检查cookie上次访问时间值。

  2. PHP函数学习之PHP函数点评

    PHP函数使用说明,应用举例,精简点评,希望对您学习php有所帮助

  3. ecshop2.7.3 在php5.4下的各种错误问题处理

    将方法内的函数,分拆为2个部分。这个和gd库没有一点关系,是ecshop程序的问题。会出现这种问题,不外乎就是当前会员的session或者程序对cookie的处理存在漏洞。进过本地测试,includes\modules\integrates\ecshop.php这个整合自身会员的类中没有重写integrate.php中的check_cookie()方法导致,验证cookie时返回的username为空,丢失了登录状态,在ecshop.php中重写了此方法就可以了。把他加到ecshop.php的最后面去就可

  4. NT IIS下用ODBC连接数据库

    $connection=intodbc_connect建立数据库连接,$query_string="查询记录的条件"如:$query_string="select*fromtable"用$cur=intodbc_exec检索数据库,将记录集放入$cur变量中。再用while{$var1=odbc_result;$var2=odbc_result;...}读取odbc_exec()返回的数据集$cur。最后是odbc_close关闭数据库的连接。odbc_result()函数是取当前记录的指定字段值。

  5. PHP使用JpGraph绘制折线图操作示例【附源码下载】

    这篇文章主要介绍了PHP使用JpGraph绘制折线图操作,结合实例形式分析了php使用JpGraph的相关操作技巧与注意事项,并附带源码供读者下载参考,需要的朋友可以参考下

  6. zen_cart实现支付前生成订单的方法

    这篇文章主要介绍了zen_cart实现支付前生成订单的方法,结合实例形式详细分析了zen_cart支付前生成订单的具体步骤与相关实现技巧,需要的朋友可以参考下

  7. Thinkphp5框架实现获取数据库数据到视图的方法

    这篇文章主要介绍了Thinkphp5框架实现获取数据库数据到视图的方法,涉及thinkPHP5数据库配置、读取、模型操作及视图调用相关操作技巧,需要的朋友可以参考下

  8. PHP+jquery+CSS制作头像登录窗(仿QQ登陆)

    本篇文章介绍了PHP结合jQ和CSS制作头像登录窗(仿QQ登陆),实现了类似QQ的登陆界面,很有参考价值,有需要的朋友可以了解一下。

  9. 基于win2003虚拟机中apache服务器的访问

    下面小编就为大家带来一篇基于win2003虚拟机中apache服务器的访问。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. Yii2中组件的注册与创建方法

    这篇文章主要介绍了Yii2之组件的注册与创建的实现方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下

返回
顶部