Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 对其值与数组关联的数组进行排序_Php - Fatal编程技术网

Php 对其值与数组关联的数组进行排序

Php 对其值与数组关联的数组进行排序,php,Php,我有一个数组,它的值是关联数组。我需要根据键对这个数组进行排序 $list = array ( array("post_id"=>"2","date"=>"2015","title"=>"title2"), array("post_id"=>"4","date"=>"2017","title"=>"title4"), array("post_id"=>"3","date"=>"2016","title"=>"title

我有一个数组,它的值是关联数组。我需要根据键对这个数组进行排序

$list = array (
    array("post_id"=>"2","date"=>"2015","title"=>"title2"),
    array("post_id"=>"4","date"=>"2017","title"=>"title4"),
    array("post_id"=>"3","date"=>"2016","title"=>"title3"),
    array("post_id"=>"1","date"=>"2014","title"=>"title1")
);
例如,按post_id对该数组进行排序,这意味着将该数组转换为:

$list = array (
    array("post_id"=>"1","date"=>"2014","title"=>"title1"),
    array("post_id"=>"2","date"=>"2015","title"=>"title2"),
    array("post_id"=>"3","date"=>"2016","title"=>"title3"),
    array("post_id"=>"4","date"=>"2017","title"=>"title4")


);
我搜索了此论坛并找到以下代码:

function array_sort($array, $on, $order=SORT_ASC){

$new_array = array();
$sortable_array = array();

if (count($array) > 0) {
    foreach ($array as $k => $v) {
        if (is_array($v)) {
            foreach ($v as $k2 => $v2) {
                if ($k2 == $on) {
                    $sortable_array[$k] = $v2;
                }
            }
        } else {
            $sortable_array[$k] = $v;
        }
    }

    switch ($order) {
        case SORT_ASC:
            asort($sortable_array);
            break;
        case SORT_DESC:
            arsort($sortable_array);
            break;
    }

    foreach ($sortable_array as $k => $v) {
        $new_array[$k] = $array[$k];
    }
}

return $new_array;}
但我不明白它到底在做什么。 主题链接是:

您没有按键排序,因此您找到的示例对您不适用。一个简单的
usort
就可以了

$list = array (
    array("post_id"=>"2","date"=>"2015","title"=>"title2"),
    array("post_id"=>"4","date"=>"2017","title"=>"title4"),
    array("post_id"=>"3","date"=>"2016","title"=>"title3"),
    array("post_id"=>"1","date"=>"2014","title"=>"title1")
);

function sortPosts($a, $b)
{
    if ($a['post_id'] == $b['post_id']) {
        return 0;
    }
    return ($a['post_id'] < $b['post_id']) ? -1 : 1;
}


usort($list, "sortPosts");
$list=array(
数组(“post_id”=>“2”,“date”=>“2015”,“title”=>“title2”),
数组(“post_id”=>“4”,“date”=>“2017”,“title”=>“title4”),
数组(“post_id”=>“3”,“date”=>“2016”,“title”=>“title3”),
数组(“post_id”=>“1”、“date”=>“2014”、“title”=>“title1”)
);
功能分类柱($a,$b)
{
如果($a['post\u id']=$b['post\u id'])){
返回0;
}
报税表($a['post_id']<$b['post_id'])?-1:1;
}
usort($list,“分拣口”);
这会将您的
$lists
数组传递到一个函数中,并比较每个数组的值-您可以看到我们正在比较每个数组的
['post_id']


由于post_id是原始数组中的字符串,您可能需要将它们转换为整数,但请看如何操作

您没有按键排序,因此您找到的示例不适合您。一个简单的
usort
就可以了

$list = array (
    array("post_id"=>"2","date"=>"2015","title"=>"title2"),
    array("post_id"=>"4","date"=>"2017","title"=>"title4"),
    array("post_id"=>"3","date"=>"2016","title"=>"title3"),
    array("post_id"=>"1","date"=>"2014","title"=>"title1")
);

function sortPosts($a, $b)
{
    if ($a['post_id'] == $b['post_id']) {
        return 0;
    }
    return ($a['post_id'] < $b['post_id']) ? -1 : 1;
}


usort($list, "sortPosts");
$list=array(
数组(“post_id”=>“2”,“date”=>“2015”,“title”=>“title2”),
数组(“post_id”=>“4”,“date”=>“2017”,“title”=>“title4”),
数组(“post_id”=>“3”,“date”=>“2016”,“title”=>“title3”),
数组(“post_id”=>“1”、“date”=>“2014”、“title”=>“title1”)
);
功能分类柱($a,$b)
{
如果($a['post\u id']=$b['post\u id'])){
返回0;
}
报税表($a['post_id']<$b['post_id'])?-1:1;
}
usort($list,“分拣口”);
这会将您的
$lists
数组传递到一个函数中,并比较每个数组的值-您可以看到我们正在比较每个数组的
['post_id']


由于post_id是原始数组中的字符串,您可能需要将它们转换为整数,但请看如何操作

最优雅的方法通常是将
usort()
函数与
闭包结合使用

看看这个简单的演示:

<?php

$list = [
    ["post_id"=>"2","date"=>"2015","title"=>"title2"],
    ["post_id"=>"4","date"=>"2017","title"=>"title4"],
    ["post_id"=>"3","date"=>"2016","title"=>"title3"],
    ["post_id"=>"1","date"=>"2014","title"=>"title1"]
];

usort(
  $list,
  function($a, $b) {
    return $a['post_id'] < $b['post_id'];
  }
);
print_r($list); // First output, descending order

usort(
  $list,
  function($a, $b) {
    return $a['post_id'] > $b['post_id'];
  }
);
print_r($list); // Second output, ascending order
第二个输出,升序:

Array
(
    [0] => Array
        (
            [post_id] => 4
            [date] => 2017
            [title] => title4
        )

    [1] => Array
        (
            [post_id] => 3
            [date] => 2016
            [title] => title3
        )

    [2] => Array
        (
            [post_id] => 2
            [date] => 2015
            [title] => title2
        )

    [3] => Array
        (
            [post_id] => 1
            [date] => 2014
            [title] => title1
        )

)
Array
(
    [0] => Array
        (
            [post_id] => 1
            [date] => 2014
            [title] => title1
        )

    [1] => Array
        (
            [post_id] => 2
            [date] => 2015
            [title] => title2
        )

    [2] => Array
        (
            [post_id] => 3
            [date] => 2016
            [title] => title3
        )

    [3] => Array
        (
            [post_id] => 4
            [date] => 2017
            [title] => title4
        )

)

最优雅的方法通常是将
usort()
函数与
闭包组合使用

看看这个简单的演示:

<?php

$list = [
    ["post_id"=>"2","date"=>"2015","title"=>"title2"],
    ["post_id"=>"4","date"=>"2017","title"=>"title4"],
    ["post_id"=>"3","date"=>"2016","title"=>"title3"],
    ["post_id"=>"1","date"=>"2014","title"=>"title1"]
];

usort(
  $list,
  function($a, $b) {
    return $a['post_id'] < $b['post_id'];
  }
);
print_r($list); // First output, descending order

usort(
  $list,
  function($a, $b) {
    return $a['post_id'] > $b['post_id'];
  }
);
print_r($list); // Second output, ascending order
第二个输出,升序:

Array
(
    [0] => Array
        (
            [post_id] => 4
            [date] => 2017
            [title] => title4
        )

    [1] => Array
        (
            [post_id] => 3
            [date] => 2016
            [title] => title3
        )

    [2] => Array
        (
            [post_id] => 2
            [date] => 2015
            [title] => title2
        )

    [3] => Array
        (
            [post_id] => 1
            [date] => 2014
            [title] => title1
        )

)
Array
(
    [0] => Array
        (
            [post_id] => 1
            [date] => 2014
            [title] => title1
        )

    [1] => Array
        (
            [post_id] => 2
            [date] => 2015
            [title] => title2
        )

    [2] => Array
        (
            [post_id] => 3
            [date] => 2016
            [title] => title3
        )

    [3] => Array
        (
            [post_id] => 4
            [date] => 2017
            [title] => title4
        )

)
我使用此功能:

function aasort (&$array, $key) {
    $sorter=array();
    $ret=array();
    reset($array);
    foreach ($array as $ii => $va) {
        $sorter[$ii]=$va[$key];
    }
    asort($sorter);
    foreach ($sorter as $ii => $va) {
        $ret[$ii]=$array[$ii];
    }
    $array=$ret;
    return $array;
}

$list = array (
    array("post_id"=>"2","date"=>"2015","title"=>"title2"),
    array("post_id"=>"4","date"=>"2017","title"=>"title4"),
    array("post_id"=>"3","date"=>"2016","title"=>"title3"),
    array("post_id"=>"1","date"=>"2014","title"=>"title1")
);

$outputArray = aasort($list,"post_id");
我使用此功能:

function aasort (&$array, $key) {
    $sorter=array();
    $ret=array();
    reset($array);
    foreach ($array as $ii => $va) {
        $sorter[$ii]=$va[$key];
    }
    asort($sorter);
    foreach ($sorter as $ii => $va) {
        $ret[$ii]=$array[$ii];
    }
    $array=$ret;
    return $array;
}

$list = array (
    array("post_id"=>"2","date"=>"2015","title"=>"title2"),
    array("post_id"=>"4","date"=>"2017","title"=>"title4"),
    array("post_id"=>"3","date"=>"2016","title"=>"title3"),
    array("post_id"=>"1","date"=>"2014","title"=>"title1")
);

$outputArray = aasort($list,"post_id");

这可能不是从那个问题中选择的最佳答案。只需提取要排序的列,然后对该列进行排序即可对原始列进行排序:

array_multisort(array_column($list, 'post_id'), SORT_ASC, $list);

这可能不是从那个问题中选择的最佳答案。只需提取要排序的列,然后对该列进行排序即可对原始列进行排序:

array_multisort(array_column($list, 'post_id'), SORT_ASC, $list);

您可以使用以下代码:

<?php
$list = array (
    array("post_id"=>"2","date"=>"2015","title"=>"title2"),
    array("post_id"=>"4","date"=>"2017","title"=>"title4"),
    array("post_id"=>"3","date"=>"2016","title"=>"title3"),
    array("post_id"=>"1","date"=>"2014","title"=>"title1")
);

$sorted = array_orderby($list, 'post_id', SORT_ASC);

echo "<pre>";
print_r($sorted);

function array_orderby()
{
    $args = func_get_args();
    $data = array_shift($args);
    foreach ($args as $n => $field) {
        if (is_string($field)) {
            $tmp = array();
            foreach ($data as $key => $row)
                $tmp[$key] = $row[$field];
            $args[$n] = $tmp;
            }
    }
    $args[] = &$data;
    call_user_func_array('array_multisort', $args);
    return array_pop($args);
}
?>

您可以使用以下代码:

<?php
$list = array (
    array("post_id"=>"2","date"=>"2015","title"=>"title2"),
    array("post_id"=>"4","date"=>"2017","title"=>"title4"),
    array("post_id"=>"3","date"=>"2016","title"=>"title3"),
    array("post_id"=>"1","date"=>"2014","title"=>"title1")
);

$sorted = array_orderby($list, 'post_id', SORT_ASC);

echo "<pre>";
print_r($sorted);

function array_orderby()
{
    $args = func_get_args();
    $data = array_shift($args);
    foreach ($args as $n => $field) {
        if (is_string($field)) {
            $tmp = array();
            foreach ($data as $key => $row)
                $tmp[$key] = $row[$field];
            $args[$n] = $tmp;
            }
    }
    $args[] = &$data;
    call_user_func_array('array_multisort', $args);
    return array_pop($args);
}
?>
功能 问题是:

  • 首先通过子数组中的
    $on
    收集所有值(第一个
    foreach
    ),并通过原始数组键
    $k
    将其绑定到
    $sortable\u数组中。像
    $list[0]['post_id']收集在:
    $sortable_数组[0]
  • 收集完所有值后,将使用
    asort
    对数组进行DESC或ASC排序(请参见
    switch
    ),以保持索引=>值连接。因此,
    $sortable_数组
    看起来像是:在
    [0=>2,1=>4,2=>3,3=>1]
    之后的
    [3=>1,0=>2,2=>3,1=>4]
  • 因此,现在对值进行了排序,可以在下一步中使用索引
  • 在最后一个
    foreach
    中,将生成一个新数组。
    $sortable\u数组
    中的索引
    $k
    用于以新顺序从原始\u数组中获取子数组
注意:此部分
if(is_array($v))
使函数行为不可预测,因为它只需要
$v
如果
$v
不是子数组,则它将从子数组获取数据

中的函数 问题是:

  • 首先通过子数组中的
    $on
    收集所有值(第一个
    foreach
    ),并通过原始数组键
    $k
    将其绑定到
    $sortable\u数组中。像
    $list[0]['post_id']收集在:
    $sortable_数组[0]
  • 收集完所有值后,将使用
    asort
    对数组进行DESC或ASC排序(请参见
    switch
    ),以保持索引=>值连接。因此,
    $sortable_数组
    看起来像是:在
    [0=>2,1=>4,2=>3,3=>1]
    之后的
    [3=>1,0=>2,2=>3,1=>4]
  • 因此,现在对值进行了排序,可以在下一步中使用索引
  • 在最后一个
    foreach
    中,将生成一个新数组。
    $sortable\u数组
    中的索引
    $k
    用于以新顺序从原始\u数组中获取子数组

注意:此部分
if(is_array($v))
使函数行为不可预测,因为它只需要
$v
如果
$v
不是子数组,则它将从子数组获取数据

是的,谢谢。我使用它和它的工作。链接中的代码也在工作。谢谢。谢谢。我使用它和它的工作。链接中的代码也在工作。也许非常感谢?也许?