Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.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_Arrays - Fatal编程技术网

Php 按字母和数字顺序按年份对数组进行排序

Php 按字母和数字顺序按年份对数组进行排序,php,arrays,Php,Arrays,我查看了上的PHP手册,但似乎没有按正确的顺序完成 基本上,在我的PHP脚本中,我得到了一组年份模型和引擎,然后使用array\u unique只得到唯一的年份模型和引擎 Array ( [0] => 2012 Jeep Liberty [7] => 2011 Jeep Liberty [12] => 2010 Jeep Liberty [15] => 2009 Jeep Liberty [18] => 2008 Jeep L

我查看了上的PHP手册,但似乎没有按正确的顺序完成

基本上,在我的PHP脚本中,我得到了一组年份模型和引擎,然后使用
array\u unique
只得到唯一的年份模型和引擎

Array
(
    [0] => 2012 Jeep Liberty
    [7] => 2011 Jeep Liberty
    [12] => 2010 Jeep Liberty
    [15] => 2009 Jeep Liberty
    [18] => 2008 Jeep Liberty
    [22] => 2007 Jeep Liberty
    [26] => 2006 Jeep Liberty
    [33] => 2006 Jeep Wrangler
    [44] => 2005 Jeep Liberty
    [51] => 2005 Jeep Wrangler
    [60] => 2004 Jeep Liberty
    [64] => 2004 Jeep Wrangler
    [73] => 2003 Jeep Liberty
    [77] => 2003 Jeep Wrangler
    [86] => 2002 Jeep Liberty
    [92] => 2002 Jeep Wrangler
    [96] => 2001 Jeep Cherokee
    [102] => 2001 Jeep Wrangler
    [106] => 2000 Jeep Cherokee
    [114] => 2000 Jeep Wrangler
    [117] => 1999 Jeep Cherokee
    [125] => 1999 Jeep Wrangler
    [128] => 1998 Jeep Cherokee
    [136] => 1998 Jeep Grand Cherokee
    [149] => 1998 Jeep Wrangler
    [152] => 1997 Jeep Cherokee
    [159] => 1997 Jeep Grand Cherokee
    [169] => 1997 Jeep Wrangler
    [173] => 1996 Jeep Cherokee
    [181] => 1996 Jeep Grand Cherokee
    [186] => 1995 Jeep Cherokee
    [193] => 1995 Jeep Grand Cherokee
    [203] => 1995 Jeep Wrangler
)
我要做的是对数组进行排序,这样不仅可以匹配年份,还可以匹配品牌和型号。比如:

Array
(
    [0] => 2012 Jeep Liberty
    [7] => 2011 Jeep Liberty
    [12] => 2010 Jeep Liberty
    [15] => 2009 Jeep Liberty
    [18] => 2008 Jeep Liberty
    [22] => 2007 Jeep Liberty
    [26] => 2006 Jeep Liberty
    [44] => 2005 Jeep Liberty
    [60] => 2004 Jeep Liberty
    [73] => 2003 Jeep Liberty
    [86] => 2002 Jeep Liberty
    [33] => 2006 Jeep Wrangler
    [51] => 2005 Jeep Wrangler
    [64] => 2004 Jeep Wrangler
    [77] => 2003 Jeep Wrangler
    [92] => 2002 Jeep Wrangler
    [102] => 2001 Jeep Wrangler 
    [114] => 2000 Jeep Wrangler
    [125] => 1999 Jeep Wrangler
    [149] => 1998 Jeep Wrangler
    [169] => 1997 Jeep Wrangler
    [203] => 1995 Jeep Wrangler
    [96] => 2001 Jeep Cherokee
    [106] => 2000 Jeep Cherokee
    [117] => 1999 Jeep Cherokee
    [128] => 1998 Jeep Cherokee
    [152] => 1997 Jeep Cherokee
    [173] => 1996 Jeep Cherokee
    [186] => 1995 Jeep Cherokee
    [136] => 1998 Jeep Grand Cherokee
    [159] => 1997 Jeep Grand Cherokee
    [181] => 1996 Jeep Grand Cherokee
    [193] => 1995 Jeep Grand Cherokee
)
或者类似性质的东西(手动排序,我可能会对数组执行一次重新索引键)——我只希望年份和品牌/型号正确排序


我最好的选择是什么?

好的,不是100%确定这是您想要的,但是如果您想要一个数组,首先按引擎排序,然后按年份排序,我可能会为您提供一个有点不雅观但有效的解决方案

首先,为每个引擎名称创建一个新的关联($res=array())和另一个2D临时数组(您可以遍历整个数组以获得引擎名称列表,保存在$list中已经看到的名称,并在每次遇到新名称时构建临时数组)。将引擎的所有元素都放在该数组中,这样就可以

[0] => 2012 Jeep Liberty
[7] => 2011 Jeep Liberty
[12] => 2010 Jeep Liberty
[15] => 2009 Jeep Liberty
[18] => 2008 Jeep Liberty
[22] => 2007 Jeep Liberty
[26] => 2006 Jeep Liberty
[44] => 2005 Jeep Liberty
[60] => 2004 Jeep Liberty
[73] => 2003 Jeep Liberty
[86] => 2002 Jeep Liberty
例如,$tempArray['Jeep Liberty'](如果您选择的名字是Jeep Liberty,因为它是最高年份)。请注意,它已按年份排序

现在,还记得前面的$list吗,它将所有名称存储在它们的外观顺序中

foreach($list as $value)
  foreach(tempArray[value] as $key => $value2)
    $res += array($key=>$value2.$value);
最后,$res的形式是

[0] => 2012 Jeep Liberty
[7] => 2011 Jeep Liberty
[12] => 2010 Jeep Liberty
[15] => 2009 Jeep Liberty
[18] => 2008 Jeep Liberty
[22] => 2007 Jeep Liberty
[26] => 2006 Jeep Liberty
[44] => 2005 Jeep Liberty
[60] => 2004 Jeep Liberty
[73] => 2003 Jeep Liberty
[86] => 2002 Jeep Liberty
[33] => 2006 Jeep Wrangler
[51] => 2005 Jeep Wrangler
[64] => 2004 Jeep Wrangler
[77] => 2003 Jeep Wrangler
[92] => 2002 Jeep Wrangler
[102] => 2001 Jeep Wrangler 
[114] => 2000 Jeep Wrangler
[125] => 1999 Jeep Wrangler
[149] => 1998 Jeep Wrangler
[169] => 1997 Jeep Wrangler
[203] => 1995 Jeep Wrangler
[96] => 2001 Jeep Cherokee
[106] => 2000 Jeep Cherokee
[117] => 1999 Jeep Cherokee
[128] => 1998 Jeep Cherokee
[152] => 1997 Jeep Cherokee
[173] => 1996 Jeep Cherokee
[186] => 1995 Jeep Cherokee
[136] => 1998 Jeep Grand Cherokee
[159] => 1997 Jeep Grand Cherokee
[181] => 1996 Jeep Grand Cherokee
[193] => 1995 Jeep Grand Cherokee

正如您所希望的。

好的,不是100%确定这是您想要的,但是如果您想要一个数组,首先按引擎排序,然后按年份排序,我可能会为您提供一个有点不雅观但有效的解决方案

首先,为每个引擎名称创建一个新的关联($res=array())和另一个2D临时数组(您可以遍历整个数组以获得引擎名称列表,保存在$list中已经看到的名称,并在每次遇到新名称时构建临时数组)。将引擎的所有元素都放在该数组中,这样就可以

[0] => 2012 Jeep Liberty
[7] => 2011 Jeep Liberty
[12] => 2010 Jeep Liberty
[15] => 2009 Jeep Liberty
[18] => 2008 Jeep Liberty
[22] => 2007 Jeep Liberty
[26] => 2006 Jeep Liberty
[44] => 2005 Jeep Liberty
[60] => 2004 Jeep Liberty
[73] => 2003 Jeep Liberty
[86] => 2002 Jeep Liberty
例如,$tempArray['Jeep Liberty'](如果您选择的名字是Jeep Liberty,因为它是最高年份)。请注意,它已按年份排序

现在,还记得前面的$list吗,它将所有名称存储在它们的外观顺序中

foreach($list as $value)
  foreach(tempArray[value] as $key => $value2)
    $res += array($key=>$value2.$value);
最后,$res的形式是

[0] => 2012 Jeep Liberty
[7] => 2011 Jeep Liberty
[12] => 2010 Jeep Liberty
[15] => 2009 Jeep Liberty
[18] => 2008 Jeep Liberty
[22] => 2007 Jeep Liberty
[26] => 2006 Jeep Liberty
[44] => 2005 Jeep Liberty
[60] => 2004 Jeep Liberty
[73] => 2003 Jeep Liberty
[86] => 2002 Jeep Liberty
[33] => 2006 Jeep Wrangler
[51] => 2005 Jeep Wrangler
[64] => 2004 Jeep Wrangler
[77] => 2003 Jeep Wrangler
[92] => 2002 Jeep Wrangler
[102] => 2001 Jeep Wrangler 
[114] => 2000 Jeep Wrangler
[125] => 1999 Jeep Wrangler
[149] => 1998 Jeep Wrangler
[169] => 1997 Jeep Wrangler
[203] => 1995 Jeep Wrangler
[96] => 2001 Jeep Cherokee
[106] => 2000 Jeep Cherokee
[117] => 1999 Jeep Cherokee
[128] => 1998 Jeep Cherokee
[152] => 1997 Jeep Cherokee
[173] => 1996 Jeep Cherokee
[186] => 1995 Jeep Cherokee
[136] => 1998 Jeep Grand Cherokee
[159] => 1997 Jeep Grand Cherokee
[181] => 1996 Jeep Grand Cherokee
[193] => 1995 Jeep Grand Cherokee

随你的便。

我想这就是你想要的:

    <?php
    $data[0] = '2012 Jeep Liberty';
    $data[7] = '2011 Jeep Liberty';
    $data[12] = '2010 Jeep Liberty';
    $data[15] = '2009 Jeep Liberty';
    $data[18] = '2008 Jeep Liberty';
    $data[22] = '2007 Jeep Liberty';
    $data[26] = '2006 Jeep Liberty';
    $data[44] = '2005 Jeep Liberty';
    $data[60] = '2004 Jeep Liberty';
    $data[73] = '2003 Jeep Liberty';
    $data[86] = '2002 Jeep Liberty';
    $data[33] = '2006 Jeep Wrangler';
    $data[51] = '2005 Jeep Wrangler';
    $data[64] = '2004 Jeep Wrangler';
    $data[77] = '2003 Jeep Wrangler';
    $data[92] = '2002 Jeep Wrangler';
    $data[102] = '2001 Jeep Wrangler ';
    $data[114] = '2000 Jeep Wrangler';
    $data[125] = '1999 Jeep Wrangler';
    $data[149] = '1998 Jeep Wrangler';
    $data[169] = '1997 Jeep Wrangler';
    $data[203] = '1995 Jeep Wrangler';
    $data[96] = '2001 Jeep Cherokee';
    $data[106] = '2000 Jeep Cherokee';
    $data[117] = '1999 Jeep Cherokee';
    $data[128] = '1998 Jeep Cherokee';
    $data[152] = '1997 Jeep Cherokee';
    $data[173] = '1996 Jeep Cherokee';
    $data[186] = '1995 Jeep Cherokee';
    $data[136] = '1998 Jeep Grand Cherokee';
    $data[159] = '1997 Jeep Grand Cherokee';
    $data[181] = '1996 Jeep Grand Cherokee';
    $data[193] = '1995 Jeep Grand Cherokee';


    function my_cmp($value_1, $value_2)
    {
        $str_1_parts = explode(' ', $value_1);
        $str_2_parts = explode(' ', $value_2);
        $year_1 = (int)$str_1_parts[0];
        $year_2 = (int)$str_2_parts[0];
        if( $year_1 > $year_2 ) return 1;
        if( $year_1 < $year_2 ) return -1;

        unset( $str_1_parts[0] );
        unset( $str_2_parts[0] );
        return strcasecmp( implode(' ', $str_1_parts) , implode(' ', $str_2_parts));
    }
    usort($data,'my_cmp');

    print_r( $data );

我想这就是你想要的:

    <?php
    $data[0] = '2012 Jeep Liberty';
    $data[7] = '2011 Jeep Liberty';
    $data[12] = '2010 Jeep Liberty';
    $data[15] = '2009 Jeep Liberty';
    $data[18] = '2008 Jeep Liberty';
    $data[22] = '2007 Jeep Liberty';
    $data[26] = '2006 Jeep Liberty';
    $data[44] = '2005 Jeep Liberty';
    $data[60] = '2004 Jeep Liberty';
    $data[73] = '2003 Jeep Liberty';
    $data[86] = '2002 Jeep Liberty';
    $data[33] = '2006 Jeep Wrangler';
    $data[51] = '2005 Jeep Wrangler';
    $data[64] = '2004 Jeep Wrangler';
    $data[77] = '2003 Jeep Wrangler';
    $data[92] = '2002 Jeep Wrangler';
    $data[102] = '2001 Jeep Wrangler ';
    $data[114] = '2000 Jeep Wrangler';
    $data[125] = '1999 Jeep Wrangler';
    $data[149] = '1998 Jeep Wrangler';
    $data[169] = '1997 Jeep Wrangler';
    $data[203] = '1995 Jeep Wrangler';
    $data[96] = '2001 Jeep Cherokee';
    $data[106] = '2000 Jeep Cherokee';
    $data[117] = '1999 Jeep Cherokee';
    $data[128] = '1998 Jeep Cherokee';
    $data[152] = '1997 Jeep Cherokee';
    $data[173] = '1996 Jeep Cherokee';
    $data[186] = '1995 Jeep Cherokee';
    $data[136] = '1998 Jeep Grand Cherokee';
    $data[159] = '1997 Jeep Grand Cherokee';
    $data[181] = '1996 Jeep Grand Cherokee';
    $data[193] = '1995 Jeep Grand Cherokee';


    function my_cmp($value_1, $value_2)
    {
        $str_1_parts = explode(' ', $value_1);
        $str_2_parts = explode(' ', $value_2);
        $year_1 = (int)$str_1_parts[0];
        $year_2 = (int)$str_2_parts[0];
        if( $year_1 > $year_2 ) return 1;
        if( $year_1 < $year_2 ) return -1;

        unset( $str_1_parts[0] );
        unset( $str_2_parts[0] );
        return strcasecmp( implode(' ', $str_1_parts) , implode(' ', $str_2_parts));
    }
    usort($data,'my_cmp');

    print_r( $data );

如果您想首先对制造商和型号进行排序,您可以这样做(假设年份总是有四位数):

下面是另一个解决方案(不考虑之前的假设):

诀窍是首先构建这个:

Array
(
    [Jeep Cherokee] => Array
        (
            [0] => 2001
            [1] => 2000
            [2] => 1999
            [3] => 1998
            [4] => 1997
            [5] => 1996
            [6] => 1995
        )

    [Jeep Grand Cherokee] => Array
        (
            [0] => 1998
            [1] => 1997
            [2] => 1996
            [3] => 1995
        )

    [Jeep Liberty] => Array
        (
            [0] => 2012
            [1] => 2011
            [2] => 2010
            [3] => 2009
            [4] => 2008
            [5] => 2007
            [6] => 2006
            [7] => 2005
            [8] => 2004
            [9] => 2003
            [10] => 2002
        )

    [Jeep Wrangler] => Array
        (
            [0] => 2006
            [1] => 2005
            [2] => 2004
            [3] => 2003
            [4] => 2002
            [5] => 2001
            [6] => 2000
            [7] => 1999
            [8] => 1998
            [9] => 1997
            [10] => 1995
        )

)

如果您想首先对制造商和型号进行排序,您可以这样做(假设年份总是四位数):

下面是另一个解决方案(不考虑之前的假设):

诀窍是首先构建这个:

Array
(
    [Jeep Cherokee] => Array
        (
            [0] => 2001
            [1] => 2000
            [2] => 1999
            [3] => 1998
            [4] => 1997
            [5] => 1996
            [6] => 1995
        )

    [Jeep Grand Cherokee] => Array
        (
            [0] => 1998
            [1] => 1997
            [2] => 1996
            [3] => 1995
        )

    [Jeep Liberty] => Array
        (
            [0] => 2012
            [1] => 2011
            [2] => 2010
            [3] => 2009
            [4] => 2008
            [5] => 2007
            [6] => 2006
            [7] => 2005
            [8] => 2004
            [9] => 2003
            [10] => 2002
        )

    [Jeep Wrangler] => Array
        (
            [0] => 2006
            [1] => 2005
            [2] => 2004
            [3] => 2003
            [4] => 2002
            [5] => 2001
            [6] => 2000
            [7] => 1999
            [8] => 1998
            [9] => 1997
            [10] => 1995
        )

)

我得到了一系列的年制车型和发动机
你从哪里得到这个阵列?在你得到它的地方排序可能会更容易
我得到了一系列的年制车型和发动机
你从哪里得到这个阵列?在你得到它的地方排序可能会更容易我最喜欢的解决方案,谢谢大家!我可以使用多维数组来获得比其他数组更大的优势,所以这是我最喜欢的答案。我最喜欢的解决方案,谢谢大家!我可以使用多维数组来获得比其他数组更大的优势,因此这是我最喜欢的答案。