php - 如何在 PHP 中按键值对关联数组的数组进行排序

标签 php arrays

很难解释,所以这里是一个例子:

$strings = array(
   array("languageCode" => "ES",  "string" => "hola"),
   array("languageCode" => "EN",  "string" => "hello"),
   array("languageCode" => "IT",  "string" => "ciao"),
   array("languageCode" => "CHS", "string" => "您好"),
);

我想通过定义顺序按 languageCode 值对字符串进行排序:

function magicStringOrder(array $strings, array $languageCodeOrder){
    // ....
    return $strings;
}

$strings = magicStringOrder($strings, array('EN', 'IT') );

$strings = array(
   array("languageCode" => "EN",  "string" => "hello"),
   array("languageCode" => "IT",  "string" => "ciao"),
   array("languageCode" => "ES",  "string" => "hola"),
   array("languageCode" => "CHS", "string" => "您好"),
);

magicStringOrder吗?

我现在知道这是一个简单的问题,只需几个循环即可解决。我需要一个非常快的函数(它被调用很多次,使用大数组)

最佳答案

另一个没有 PHP 排序功能的想法:

// sort by cmp $arr[$magic_key] <-> arr $magic_order
function magicSort($arr, $magic_key="", $magic_order = array())
{
  $sorted = array();
  foreach($magic_order AS $v) {
    foreach($arr AS $k2 => $v2) {
      if($v===$v2[$magic_key]) {
        $sorted[] = $v2;
        unset($arr[$k2]);
      }
    }
  }

  // attach what's left
  return array_merge($sorted, $arr);
}

Test it at eval.in (链接即将过期)

$strings = array(
   array("languageCode" => "ES",  "string" => "hola"),
   array("languageCode" => "EN",  "string" => "hello"),
   array("languageCode" => "IT",  "string" => "ciao"),
   array("languageCode" => "CHS", "string" => "??"),
);

print_r(magicSort($strings, "languageCode", array("EN", "IT")));

输出到:

Array
(
    [0] => Array
        (
            [languageCode] => EN
            [string] => hello
        )

    [1] => Array
        (
            [languageCode] => IT
            [string] => ciao
        )

    [2] => Array
        (
            [languageCode] => ES
            [string] => hola
        )

    [3] => Array
        (
            [languageCode] => CHS
            [string] => 您好
        )

)

$magic_order 也可以为空。如果是这样,则仅重新索引该数组。 $magic_order 中不存在的值数组会下移并保持其顺序。

不确定,这是否正是您所需要的。

关于php - 如何在 PHP 中按键值对关联数组的数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28393349/

相关文章:

arrays - 实现Scan接口(interface)将json数组读入map

C:向数组添加元素

c - 使用数组的 C 语言基本类似数据库程序

java - 如何根据文件中的数据类型将 CSV 文件读入 2 个 ArrayList?

php - 如何使用 MySQL 存储过程返回值数组?

php - 在php中连接mysql数据库

php - 使用 php 在 bootstrap 中动态形成列

php - 使用 jQuery $.post 提交一个 &lt;input type ="file"/>

php - 在 codeigniter 中使用组查询加入 2 个表

java - 统计 ArrayList 中一定范围内的数字