Php 按字母和数字顺序按年份对数组进行排序
我查看了上的PHP手册,但似乎没有按正确的顺序完成 基本上,在我的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
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
)
)
我得到了一系列的年制车型和发动机
你从哪里得到这个阵列?在你得到它的地方排序可能会更容易我得到了一系列的年制车型和发动机你从哪里得到这个阵列?在你得到它的地方排序可能会更容易我最喜欢的解决方案,谢谢大家!我可以使用多维数组来获得比其他数组更大的优势,所以这是我最喜欢的答案。我最喜欢的解决方案,谢谢大家!我可以使用多维数组来获得比其他数组更大的优势,因此这是我最喜欢的答案。