首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按特定顺序数组对2d字符串数组进行PHP排序

按特定顺序数组对2d字符串数组进行PHP排序
EN

Stack Overflow用户
提问于 2015-04-07 15:06:43
回答 2查看 180关注 0票数 2

我对php很陌生,我一直试图用一个特定的order数组对一个2d字符串数组进行排序。一直在使用“usort”和“比较法”,但当使用2d数组和字符串时,我似乎无法将头绕在它们周围。

需要输入数组到方法和返回排序数组,以相同的格式。因此,对于数组中的每个条目,它将根据顺序数组的顺序对第二级“文件”值进行排序。对如何做到这一点有什么建议吗?

代码语言:javascript
复制
//actual array to be sorted by 'file'
$Array ( 
[0] => Array ( [source] => img/table/icon/toxic.svg [file] => toxic ) 
[1] => Array ( [source] => img/table/icon/health.svg [file] => health ) 
[2] => Array ( [source] => img/table/icon/irritant.svg [file] => irritant   ));

//order array with desired sort order
$order = array("irritant","corrosive","environment" ,"health","toxic","oxidizing","flammable","explosive","gas");

//Desired Output Result
$Array ( 
[0] => Array ( [source] => img/table/icon/irritant.svg [file] => irritant )
[1] => Array ( [source] => img/table/icon/health.svg [file] => health ) 
[2] => Array ( [source] => img/table/icon/toxic.svg [file] => toxic ) );

第一次看到刺激,最后看到有毒:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-07 15:24:12

基本的方法是迭代数组和顺序数组,并将键重新分配到一个新的数组中。

代码语言:javascript
复制
<?php
    $a[] = array('source' => 'img/table/icon/toxic.svg','file'=>'toxic');
    $a[] = array('source' => 'img/table/icon/health.svg','file'=>'health');
    $a[] = array('source' => 'img/table/icon/irritant.svg','file'=>'irritant');

    $b = array();

    $order = array("irritant","corrosive","environment","health","toxic","oxidizing","flammable","explosive","gas");

    foreach ($a as $arr) {
        foreach ($order as $key => $o) {
            if ($o == $arr['file']) {
                $b[$key] = $arr;
                break;
            }
        }
    }
    ksort($b);
    print_r(array_values($b)); // or print_r($b); if you dont want sequential keys
?>

产出:

代码语言:javascript
复制
Array ( 
[0] => Array ( [source] => img/table/icon/irritant.svg [file] => irritant ) 
[1] => Array ( [source] => img/table/icon/health.svg [file] => health ) 
[2] => Array ( [source] => img/table/icon/toxic.svg [file] => toxic )
)
票数 0
EN

Stack Overflow用户

发布于 2015-04-07 15:25:22

这可以通过巧妙地使用PHP的乌斯托函数来实现。你的电话看起来可能是这样的:

代码语言:javascript
复制
$order = array("irritant","corrosive","environment" ,"health","toxic","oxidizing","flammable","explosive","gas");
usort($array, function ($a, $b) use ($order) {
    $aOrder = array_search($a['file'], $order);
    $bOrder = array_search($b['file'], $order);
    if ($aOrder == $bOrder) return 0;
    return ($aOrder > $bOrder) ? 1 : -1;
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29494885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档