假设您有一个数组
$input = array(1,1,1,2,2,3,3,4,5,5);
你想要分割数组,以便你在一个数组中包含所有1,在一个数组中包含所有2,等等。
但是,你不知道$ input数组是否只包含1个,或者只包含1个和2个,或者有多少个数字。
这些数字是按数字排序的。
答案 0 :(得分:2)
array_count_values()可能对您有所帮助,请参阅下面的链接。
答案 1 :(得分:1)
这是一个非常简单的方法,只需设置键和值,然后构建嵌套数组。
$input = array(1,1,1,2,2,3,3,4,5,5);
$output = array();
foreach ( $input as $i ){
if(!isset( $output[$i] ) ){
$output[$i] = array();
}
$output[$i][] = $i;
}
echo '<pre>';
var_export( $output );
输出
array (
1 =>
array (
0 => 1,
1 => 1,
2 => 1,
),
2 =>
array (
0 => 2,
1 => 2,
),
3 =>
array (
0 => 3,
1 => 3,
),
4 =>
array (
0 => 4,
),
5 =>
array (
0 => 5,
1 => 5,
),
)
输入
$input = array(1,2,3,3,4,2,3,1,8,7);
输出
array (
1 =>
array (
0 => 1,
1 => 1,
),
2 =>
array (
0 => 2,
1 => 2,
),
3 =>
array (
0 => 3,
1 => 3,
2 => 3,
),
4 =>
array (
0 => 4,
),
8 =>
array (
0 => 8,
),
7 =>
array (
0 => 7,
),
)
答案 2 :(得分:0)
如果您不关心性能,可以使用简单的循环和array_slice()
。跟踪您在$input
数组中的位置,并在值更改时对数组进行切片。
$input = array(1,1,1,2,2,3,3,4,5,5);
$curr = $input[0];
$count = 0;
$offset = 0;
$length = 0;
$result_array = array();
foreach($input as $i)
{
if($i != $curr)
{
$result_array[] = array_slice($input, $offset, $length);
$curr = $i;
$offset = $count;
$length = 0;
}
$count++;
$length++;
}
$result_array[] = array_slice($input, $offset);
答案 3 :(得分:-1)
不确定你正在寻找什么,但如果你想将它们分成一组分组成数组的相似值:
$input = array(1,1,1,2,2,3,3,4,5,5);
$parts = array_count_values($input);
foreach ($parts as $key => $val) {
$parts[$key] = array_fill(0, $val, $key);
}
如果密钥需要连续且与您的值无关:
$parts = array_values($parts);
如果是家庭作业,你应该先尝试做。如果你这样做,最好提供你在问题中尝试的内容。