是的,这已经通过使用不同的方法被无数次地回答,在大多数情况下,它可以工作,但不适用于我的情况,请允许我解释。
以键值为基础的组数组
我从一个CSV文件构建一个数组,这是很容易的部分,困难的部分是,我的是,我必须从第一个数组构建另一个数组,根据一个键值对结果进行分组,问题是,这个值是不是一个数组,也不是一个简单的字符串...
这是从CSV的阵列的示例文件
[0] => Array
(
[key_1] => FOO
[cats] => /30/
[key_2] => FTU-1
)
[1] => Array
(
[key_1] => FOO
[cats] => /30/
[key_2] => FTU-2
)
[2] => Array
(
[key_1] => FOO
[cats] => /30/10/
[key_2] => FTU-3
)
[3] => Array
(
[key_1] => FOO
[cats] => /15/
[key_2] => FTU-4
)
[4] => Array
(
[key_1] => FOO
[cats] => /10/
[key_2] => FTU-5
)
[0] => Array
(
[key_1] => FOO
[cats] => /15/
[key_2] => FTU-6
)
最后数组看起来像此基础上栏cats
:
[30] => Array
(
[0] => Array
(
[key_1] => FOO
[cats] => /30/
[key_2] => FTU-1
)
[1] => Array
(
[key_1] => FOO
[cats] => /30/
[key_2] => FTU-2
)
[1] => Array
(
[key_1] => FOO
[cats] => /30/10/
[key_2] => FTU-3
)
[15] => Array
(
[0] => Array
(
[key_1] => FOO
[cats] => /15/
[key_2] => FTU-4
)
[1] => Array
(
[key_1] => FOO
[cats] => /15/
[key_2] => FTU-6
)
[10] => Array
(
[0] => Array
(
[key_1] => FOO
[cats] => /30/10/
[key_2] => FTU-3
)
[1] => Array
(
[key_1] => FOO
[cats] => /10/
[key_2] => FTU-5
)
我正在寻找这个This answer这是最接近我需要,但没有工作,这就是为什么我要求帮助。
更新:我想我只是解决了它...
foreach($firstarr as $k => $v) {
$cats = array_filter(explode('/', $v['cats']));
foreach($cats as $ks=>$vs) {
if(stripos($v['cats'], $vs)){
$pp[$vs][] = $v;
}
}
}
看起来很不错。
这是对我的更新同样的逻辑,。请参阅代码中的if($ key ==“”),而是使用array_filter(),它的作用相同,您的答案在更新后发布了一分钟,因此不允许我选择答案只是尚未... – Tanker
array_filter - 优雅的解决方案,但ID为0的类别将被忽略。 如果是这样,那么!empty($ key)在循环中比array_filter更好 - 因为它也通过数组元素 –