php迭代键和值,并根据数组键整数差分为子数组

php迭代键和值,并根据数组键整数差分为子数组,php,multidimensional-array,key,key-value-coding,dynamic-arrays,Php,Multidimensional Array,Key,Key Value Coding,Dynamic Arrays,这里最让人头疼的是,我累坏了迭代键和值,并操纵指针来比较数组键中整数之间的差异。我试图根据大于1的数组键的减法来拆分和排列这个数组,我注意到这是一种有效的方法,可以将值分成簇,如问题底部所述 例如:([0]=>猫[2]=>水果[3]=>苹果)键等同于: 第二-第一键:2-0=2(2>1) 第三-第二键:3-2=1(1=1) 我已经在问题的底部对我想要完成的事情做了一个简明的解释 数组代码如下: $arr1 = array("cat", "Van", "fruit", "apple", "oran

这里最让人头疼的是,我累坏了迭代键和值,并操纵指针来比较数组键中整数之间的差异。我试图根据大于1的数组键的减法来拆分和排列这个数组,我注意到这是一种有效的方法,可以将值分成簇,如问题底部所述

例如:([0]=>猫[2]=>水果[3]=>苹果)键等同于:

第二-第一键:2-0=2(2>1)

第三-第二键: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] => 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,则向下一个数组键传递集群附加的数组值, 如上面示例中的从this*到this*键值


任何帮助、建议和代码都将不胜感激,因为我发现要实现这一目标很难同时迭代键和值。干杯。

我想到的是一个简单的解决方案,如下所示(经过测试并产生想要的结果):


我不确定你在这里想要实现什么,因为这看起来有点奇怪;)无论您试图解决的根本问题是什么,我认为有一个比这个更优雅的解决方案。

+1简单优雅的解决方案!!:)你救了我很多麻烦,因为我自己从来没有处理过这样的事情。该脚本用于文本处理,从列表中查找关键字,然后进一步处理。