在多维年份生成模型PHP数组中按年份排序(查找最小和最大范围)

在多维年份生成模型PHP数组中按年份排序(查找最小和最大范围),php,arrays,Php,Arrays,下面是我的原始阵列的一个小视图 Array ( [0] => Array ( [0] => 1993 [1] => Jeep [2] => Cherokee [3] => Base Sport Utility 2-Door [4] => 4.0L 242Cu. In. l6 GAS OHV Naturally Aspi

下面是我的原始阵列的一个小视图

Array
(
    [0] => Array
        (
            [0] => 1993
            [1] => Jeep
            [2] => Cherokee
            [3] => Base Sport Utility 2-Door
            [4] => 4.0L 242Cu. In. l6 GAS OHV Naturally Aspirated
        )

    [1] => Array
        (
            [0] => 1992
            [1] => Jeep
            [2] => Cherokee
            [3] => Base Sport Utility 2-Door
            [4] => 4.0L 242Cu. In. l6 GAS OHV Naturally Aspirated
        )

    [2] => Array
        (
            [0] => 1991
            [1] => Jeep
            [2] => Cherokee
            [3] => Base Sport Utility 2-Door
            [4] => 4.0L 242Cu. In. l6 GAS OHV Naturally Aspirated
        )
所以,让我们享受一些乐趣,或者忍受一些痛苦,然后循环这个

首先,让我们创建一组您不打算使用的无意义数组。也许做一个循环计数器

$yearsarray = array();
$makearray = array();
$modelarray = array();
$fullarray = array();
$lowestyear = 0;
$highestyear = 9999;
$count = 0;
好的,酷。现在是有趣的部分,循环

$yearsarray = array();
$makearray = array();
$modelarray = array();
$fullarray = array();
$lowestyear = 0;
$highestyear = 9999;
$count = 0;
这是我目前的情况

foreach ($ymmarr as $ok) {

  $yearmakemodel = $ok[0] . ' ' . $ok[1] . ' ' . $ok[2];
  $makemodel = $ok[1] . ' ' . $ok[2];

  $fullarray[$makemodel][] = $yearmakemodel;
  $count++;
}
我也尝试了很多其他的东西。尝试(如循环前的变量所示)在仍然试图依靠键(make和Model)的同时尝试使其更高或更低。。但失败了。数组的多维性是我想得到的

我发现的一切似乎都与某种usort函数绑定到键有关。。我真的无法在下面这样的索引数组中找到任何内容。也许我错过了显而易见的事情

无论如何,这个,公认愚蠢的简单循环带来了这个

Array
(
    [Jeep Cherokee] => Array
        (
            [0] => 1993 Jeep Cherokee
            [1] => 1992 Jeep Cherokee
            [2] => 1991 Jeep Cherokee
            [3] => 1993 Jeep Cherokee
            [4] => 1992 Jeep Cherokee
            [5] => 1991 Jeep Cherokee
            [6] => 1992 Jeep Cherokee
            [7] => 1991 Jeep Cherokee
            [8] => 1999 Jeep Cherokee
            [9] => 1998 Jeep Cherokee
            [10] => 1996 Jeep Cherokee
            [11] => 1994 Jeep Cherokee
            [12] => 1993 Jeep Cherokee
            [13] => 1997 Jeep Cherokee
            [14] => 1996 Jeep Cherokee
            [15] => 1995 Jeep Cherokee
            [16] => 1994 Jeep Cherokee
            [17] => 1993 Jeep Cherokee
            [18] => 1992 Jeep Cherokee
            [19] => 1991 Jeep Cherokee
            [20] => 1992 Jeep Cherokee
            [21] => 1991 Jeep Cherokee
            [22] => 1999 Jeep Cherokee
            [23] => 1998 Jeep Cherokee
            [24] => 1992 Jeep Cherokee
            [25] => 1991 Jeep Cherokee
            [26] => 1999 Jeep Cherokee
            [27] => 1998 Jeep Cherokee
            [28] => 1997 Jeep Cherokee
            [29] => 1996 Jeep Cherokee
            [30] => 1995 Jeep Cherokee
            [31] => 1994 Jeep Cherokee
            [32] => 1999 Jeep Cherokee
            [33] => 1998 Jeep Cherokee
            [34] => 1997 Jeep Cherokee
            [35] => 1996 Jeep Cherokee
            [36] => 1995 Jeep Cherokee
            [37] => 1994 Jeep Cherokee
            [38] => 1999 Jeep Cherokee
            [39] => 1998 Jeep Cherokee
            [40] => 1997 Jeep Cherokee
            [41] => 1996 Jeep Cherokee
            [42] => 1995 Jeep Cherokee
            [43] => 1994 Jeep Cherokee
            [44] => 1993 Jeep Cherokee
            [45] => 1992 Jeep Cherokee
            [46] => 1991 Jeep Cherokee
            [47] => 1999 Jeep Cherokee
            [48] => 1998 Jeep Cherokee
            [49] => 1997 Jeep Cherokee
            [50] => 1996 Jeep Cherokee
            [51] => 1995 Jeep Cherokee
            [52] => 1994 Jeep Cherokee
            [53] => 1993 Jeep Cherokee
            [54] => 1992 Jeep Cherokee
            [55] => 1991 Jeep Cherokee
            [56] => 1999 Jeep Cherokee
            [57] => 1998 Jeep Cherokee
        )

    [Jeep Comanche] => Array
        (
            [0] => 1992 Jeep Comanche
            [1] => 1991 Jeep Comanche
            [2] => 1992 Jeep Comanche
            [3] => 1991 Jeep Comanche
            [4] => 1992 Jeep Comanche
            [5] => 1991 Jeep Comanche
        )

    [Jeep Wrangler] => Array
        (
            [0] => 1993 Jeep Wrangler
            [1] => 1992 Jeep Wrangler
            [2] => 1991 Jeep Wrangler
            [3] => 1992 Jeep Wrangler
            [4] => 1991 Jeep Wrangler
            [5] => 1994 Jeep Wrangler
            [6] => 1993 Jeep Wrangler
            [7] => 1992 Jeep Wrangler
            [8] => 1991 Jeep Wrangler
            [9] => 1995 Jeep Wrangler
            [10] => 1994 Jeep Wrangler
            [11] => 1999 Jeep Wrangler
            [12] => 1998 Jeep Wrangler
            [13] => 1997 Jeep Wrangler
            [14] => 1995 Jeep Wrangler
            [15] => 1994 Jeep Wrangler
            [16] => 1993 Jeep Wrangler
            [17] => 1992 Jeep Wrangler
            [18] => 1991 Jeep Wrangler
            [19] => 1999 Jeep Wrangler
            [20] => 1998 Jeep Wrangler
            [21] => 1999 Jeep Wrangler
            [22] => 1998 Jeep Wrangler
            [23] => 1997 Jeep Wrangler
        )

)
我的问题是我不知道数组键。它们是动态的。如果不使用
[Jeep Cherokee]=>Array
,而是对所有的吉普切诺基车使用
[0]=>Array
,对科曼奇车使用
[1]=>Array
,等等,这看起来会很简单

我试图通过声明这些

$next = next($ymmarr);
$nextyear = $next[0];
$nextmakemodel = $next[1] . ' ' . $next[2];
做一个条件语句

if ($makemodel == $nextmakemodel) {
 $fullarray[$count++] = $yearmakemodel;
}
但不,我的逻辑显然有缺陷

我一直在做这件事。我知道有一个更简单的方法

我正在尝试的一件事是创建这样一个平面索引循环

$fullarray2[] = $yearmakemodel;
Array
(
    [0] => 1991 - 1999 Jeep Cherokee
    [1] => 1991 - 1992 Jeep Comanche
    [2] => 1991 - 1999 Jeep Wrangler
)
然后按年份分类

function natorder($a,$b) {
   return strnatcmp ( $a,  $b );
}

uasort ($fullarray2, 'natorder');

$fullarray2 = array_values(array_unique($fullarray2));
这带来了一些东西,看起来我可以循环并再次组合品牌和模型,但这是必要的吗

Array
(
    [0] => 1991 Jeep Cherokee
    [1] => 1991 Jeep Comanche
    [2] => 1991 Jeep Wrangler
    [3] => 1992 Jeep Cherokee
    [4] => 1992 Jeep Comanche
    [5] => 1992 Jeep Wrangler
    [6] => 1993 Jeep Cherokee
    [7] => 1993 Jeep Wrangler
    [8] => 1994 Jeep Cherokee
    [9] => 1994 Jeep Wrangler
    [10] => 1995 Jeep Cherokee
    [11] => 1995 Jeep Wrangler
    [12] => 1996 Jeep Cherokee
    [13] => 1997 Jeep Cherokee
    [14] => 1997 Jeep Wrangler
    [15] => 1998 Jeep Cherokee
    [16] => 1998 Jeep Wrangler
    [17] => 1999 Jeep Cherokee
    [18] => 1999 Jeep Wrangler
)
老实说,我希望从中得到的基本上是一个数组,它能给我这样的数据

$fullarray2[] = $yearmakemodel;
Array
(
    [0] => 1991 - 1999 Jeep Cherokee
    [1] => 1991 - 1992 Jeep Comanche
    [2] => 1991 - 1999 Jeep Wrangler
)
或者。。无论什么类似的东西,我可以很容易地重复


我把这件事弄得太复杂了吗?

如果我正确理解了你的问题,这应该可以达到你想要达到的目的

为简洁起见,我从原始数组中省略了索引
3
4

下面是一个工作示例:


如果我正确理解了您的问题,这应该可以实现您想要实现的目标

为简洁起见,我从原始数组中省略了索引
3
4

下面是一个工作示例:

在您的代码之后:

foreach ($ymmarr as $ok) {

$yearmakemodel = $ok[0] . ' ' . $ok[1] . ' ' . $ok[2];
$makemodel = $ok[1] . ' ' . $ok[2];

  $fullarray[$makemodel][] = $yearmakemodel;
$count++;
}
我想简化为(这只是一个细节,您可以保持代码的原样):

这给了你这样的东西:

$fullarray= Array
(
    'Jeep Cherokee' => Array
        (
            0 => '1993 Jeep Cherokee',
            1 => '1992 Jeep Cherokee',
            2 => '1991 Jeep Cherokee',
            56 => '1999 Jeep Cherokee'

        ),

    'Jeep Comanche' => Array
        (
            0 => '1992 Jeep Comanche',
            1 => '1991 Jeep Comanche',
            2 => '1992 Jeep Comanche',

        ),

    'Jeep Wrangler' => Array
        (
            0 => '1993 Jeep Wrangler',
            1 => '1992 Jeep Wrangler',
            2 => '1991 Jeep Wrangler',
            11 => '1999 Jeep Wrangler'

        )

);
您可以直接使用
array\u map
获得预期的结果

$fullarray=array_map(function($val){$end=($end=explode(' ',current($val)))?$end[1].' '.$end[2]:'';$min=intval(min($val));$max=intval(max($val)); return $min.'-'.$max.' '.$end;},array_values($fullarray));
在这一步

var_dump($fullarray)
输出:

array(3) {
  [0]=>
  string(23) "1991-1999 Jeep Cherokee"
  [1]=>
  string(23) "1991-1992 Jeep Comanche"
  [2]=>
  string(23) "1991-1999 Jeep Wrangler"
}
在您的代码之后:

foreach ($ymmarr as $ok) {

$yearmakemodel = $ok[0] . ' ' . $ok[1] . ' ' . $ok[2];
$makemodel = $ok[1] . ' ' . $ok[2];

  $fullarray[$makemodel][] = $yearmakemodel;
$count++;
}
我想简化为(这只是一个细节,您可以保持代码的原样):

这给了你这样的东西:

$fullarray= Array
(
    'Jeep Cherokee' => Array
        (
            0 => '1993 Jeep Cherokee',
            1 => '1992 Jeep Cherokee',
            2 => '1991 Jeep Cherokee',
            56 => '1999 Jeep Cherokee'

        ),

    'Jeep Comanche' => Array
        (
            0 => '1992 Jeep Comanche',
            1 => '1991 Jeep Comanche',
            2 => '1992 Jeep Comanche',

        ),

    'Jeep Wrangler' => Array
        (
            0 => '1993 Jeep Wrangler',
            1 => '1992 Jeep Wrangler',
            2 => '1991 Jeep Wrangler',
            11 => '1999 Jeep Wrangler'

        )

);
您可以直接使用
array\u map
获得预期的结果

$fullarray=array_map(function($val){$end=($end=explode(' ',current($val)))?$end[1].' '.$end[2]:'';$min=intval(min($val));$max=intval(max($val)); return $min.'-'.$max.' '.$end;},array_values($fullarray));
在这一步

var_dump($fullarray)
输出:

array(3) {
  [0]=>
  string(23) "1991-1999 Jeep Cherokee"
  [1]=>
  string(23) "1991-1992 Jeep Comanche"
  [2]=>
  string(23) "1991-1999 Jeep Wrangler"
}

嗨,我从这里一路感受到你的痛苦,但是在你努力向我们展示你不是要求我们为你写代码,并且已经尝试了很多事情,我现在一点也不确定你想要实现什么。“我想要什么”数组似乎与我开始使用的数组无关。你能试着把我得到的和我想要的进行分组吗?通过某种方式,我们可以更好地看到逻辑。如果你运气好的话,只需使用
$fullarray=array\u values($fullarray)
,这将有效地删除那些平均关联键。@RiggsFolly我知道这是一个混搭,这是我的经验。知道我想要的是什么,最小和最大年份范围(不管数组是如何构造的……很重要,但它的结果是次要的)。。不过我明白你的意思,而且有一些很棒的answers@ArtisticPhoenix啊。我将来会记住这一点。我在另一个数组尝试上尝试了数组_值,但在原始数组上没有尝试。测试了一下,然后。。是的,分离和索引会很有帮助:)。在那里的某个地方。谢谢你嗨,我从这里一路感受到你的痛苦,但是在你努力向我们展示你不是要求我们只为你写代码,并且已经尝试了很多事情,我现在一点也不确定你想要实现什么。“我想要什么”数组似乎与我开始使用的数组无关。你能试着把我得到的和我想要的进行分组吗?通过某种方式,我们可以更好地看到逻辑。如果你运气好的话,只需使用
$fullarray=array\u values($fullarray)
,这将有效地删除那些平均关联键。@RiggsFolly我知道这是一个混搭,这是我的经验。知道我想要的是什么,最小和最大年份范围(不管数组是如何构造的……很重要,但它的结果是次要的)。。不过我明白你的意思,而且有一些很棒的answers@ArtisticPhoenix啊。我将来会记住这一点。我在另一个数组尝试上尝试了数组_值,但在原始数组上没有尝试。测试了一下,然后。。是的,分离和索引会很有帮助:)。在那里的某个地方。谢谢你有趣的解决方案。考虑可能使用
列表
提取
。。而
array\u map
的力量从未停止让我惊讶。。我需要更多地思考一些问题,以避免在转换数组时遇到这些麻烦。这是假设我的原始数组看起来是这样的:
array([0]=>array([0]=>1993[1]=>Jeep[2]=>Cherokee)[1]=>array([0]=>1991[1]=>Jeep[2]=>Wrangler))
。。还是很好,谢谢you@BrianBruman第一个数组可以与问题中的第一个数组具有完全相同的结构。我只是不想浪费时间来创建回答您的问题所不需要的虚拟数据。有趣的解决方案。考虑可能使用
列表
提取
。。而
array\u map
的力量从未停止让我惊讶。。我需要更多地思考一些问题,以避免在转换数组时遇到这些麻烦。这是假设我的原始数组loo