在多维年份生成模型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