这里
令人头疼,我厌倦了迭代键和值并操纵指针来比较数组键中整数之间的差异。我正在尝试根据数组键大于 1 的减法来拆分和排列这个数组,我很早就注意到这是一种将值分成集群的有效方法,如本问题底部所述。
例如:([0] => 猫[2] =>水果 [3] => 苹果)键等同于:
第 2 - 1键:2-0 = 2 (2>1)
第 3 - 2键:3-2 = 1 (1=1)
我已经在问题的底部简要解释了我想要完成的任务。
数组代码如下:
$arr1 = array("cat", "Van", "fruit", "apple", "orange", "banana", "car", "car", "boat", "Bike", "truck", "cat", "dog", "bus", "van", "truck", "Sea", "ocean", "sea", "ship", "train", "Land");
$arr2 = array("cat", "fruit", "apple", "orange", "banana", "cat", "dog", "sea", "ocean", "land");
$array = array_uintersect($arr1, $arr2, 'strcasecmp');
//returns:
Array
(
[0] => cat
[2] => fruit
[3] => apple
[4] => orange
[5] => banana
[11] => cat
[12] => dog
[16] => Sea
[17] => ocean
[18] => sea
[21] => Land
)
(下面)是我迄今为止编写的代码,作为我尝试分离的实现,如本问题底部所述:
$arr1 = array("cat", "Van", "fruit", "apple", "orange", "banana", "car", "car", "boat", "Bike", "truck", "cat", "dog", "bus", "van", "truck", "Sea", "ocean", "sea", "ship", "train", "Land");
$arr2 = array("cat", "fruit", "apple", "orange", "banana", "cat", "dog", "sea", "ocean", "land");
foreach($array as &$val){
$array2 = $array;
prev($array);
if(key($array2)-key($array)!==1) { //bool to determine if the difference in keys is only 1 integer apart.
$val = array($val);
$val[] = "";
}}
unset($val);
print_r(collapse_multi_arrays($array)); //collapse_multi_arrays is a custom function I have to form a single array from multidimensional ones.
outputs:
Array
(
[0] => cat
[1] =>
[2] => fruit
[3] => apple
[4] => orange
[5] => banana
[6] =>
[7] => cat
[8] => dog
[9] =>
[10] => Sea
[11] => ocean
[12] => sea
[13] =>
[14] => Land
[15] =>
)
(上面的输出)不确定这是否是迭代数组的最明智方法,但我想使用空值以某种方式进行分块或拆分,以便获得如下所示的内容:
Array
(
[0] => Array
(
[0] => cat
)
[1] => Array
(
[2] => fruit
[3] => apple
[4] => orange
[5] => banana
)
[2] => Array
(
[11] => cat
[12] => dog
)
[3] => Array
(
[16] => Sea
[17] => ocean
[18] => sea
)
[4] => Array
(
[21] => Land
)
)
我想我可以附加到每个集群到每个一个值喜欢这个:
Array
(
[0] => cat
[1] => fruit apple orange banana
[2] => cat dog
[3] => Sea ocean sea
[4] => Land
)
//===
============================================================总体解释:我总体上想做的是这样的,
由此:
Array
(
[0] => cat
[2] => fruit
[3] => apple
[4] => orange
[5] => banana
[11] => cat
[12] => dog
[16] => Sea
[17] => ocean
[18] => sea
[21] => Land
)
对此:
Array
(
[0] => cat
[1] => fruit apple orange banana
[2] => cat dog
[3] => Sea ocean sea
[4] => Land
)
这是当数组键的差异仅相隔 1 个整数时将数组值聚类追加在一起。如果数组键整数的差值大于 1,则群集附加的数组值将传递给下一个数组键,如上面的"从这个*到这个*"键值对的例子
任何帮助,建议,代码将不胜感激,因为我发现很难迭代键和值来实现这一目标,干杯。
我想到的是一个简单的解决方案,如下所示(经过测试并产生所需的结果):
$a = array(
0 => 'cat',
2 => 'fruit',
3 => 'apple',
4 => 'orange',
5 => 'banana',
11 => 'cat',
12 => 'dog',
16 => 'Sea',
17 => 'ocean',
18 => 'sea',
21 => 'Land',
);
$last = 0;
$stack = $grouped = array();
foreach ($a as $key => $val) {
if ($key - $last > 1) {
$grouped[] = implode(' ', $stack);
$stack = array();
}
$stack[] = $val;
$last = $key;
}
$grouped[] = implode(' ', $stack);
print_r($grouped);
我不确定你在这里想实现什么,因为它看起来有点奇怪;)无论你试图解决的根本问题是什么,我认为有一个比这更优雅的解决方案。