如何在PHP中将1个数组拆分为2个数组,删除某些项,然后将它们再次组合为1个数组?

时间:2019-03-27 17:50:25

标签: php arrays

我想使用数组创建一些东西。我有1个数组,我需要将其拆分为2个数组。之后,从两个数组中搜索特定项目并将其删除,然后将其从2个数组组合为1个数组。

我该怎么做?

我已经尝试将unset用于数组,但是由于我的数组数据格式为16/2 / 1 / 1和16/2 / 1 < / strong> / 5。我需要删除具有1的数据。

我的格式数组是这样的

Array 
( 
[1] => Array 
    ( 
        [0] => 16/2/1/1 --> remove this have 1 after 2
        [1] => 16/2/0/2 
        [2] => 16/2/0/3 
        [3] => 16/2/0/4 
        [4] => 16/2/0/5 
        [5] => 16/2/0/6 
        [6] => 16/2/0/7 
        [7] => 16/2/0/8 
        [8] => 16/2/0/9 
        [9] => 16/2/0/10 
        [10] => 16/2/0/11 
        [11] => 16/2/0/12 
        [12] => 16/2/0/13 
        [13] => 16/2/0/14 
        [14] => 16/2/0/15 
        [15] => 16/2/0/16 
    ) 
[2] => Array 
    ( 
        [0] => 16/2/0/1 
        [1] => 16/2/0/2 
        [2] => 16/2/0/3 
        [3] => 16/2/0/4 
        [4] => 16/2/1/5 --> and this have 1 after 2 before 5
        [5] => 16/2/0/6 
        [6] => 16/2/0/7 
        [7] => 16/2/0/8 
        [8] => 16/2/0/9 
        [9] => 16/2/0/10 
        [10] => 16/2/0/11 
        [11] => 16/2/0/12 
        [12] => 16/2/0/13 
        [13] => 16/2/0/14 
        [14] => 16/2/0/15 
        [15] => 16/2/0/16 
    ) 
) 

我希望输出类似(合并后)

Array 
   ( 
    [0] => 16/2/0/2 
    [1] => 16/2/0/3 
    [2] => 16/2/0/4 
    [3] => 16/2/0/6 
    [4] => 16/2/0/7 
    [5] => 16/2/0/8 
    [6] => 16/2/0/9 
    [7] => 16/2/0/10 
    [8] => 16/2/0/11 
    [9] => 16/2/0/12 
    [10] => 16/2/0/13 
    [11] => 16/2/0/14 
    [12] => 16/2/0/15 
    [13] => 16/2/0/16 
)

感谢您的时间来帮助我。

2 个答案:

答案 0 :(得分:1)

我会使用preg_grep,它允许您使用正则表达式搜索数组。

$array =[
    '16/2/0/13',
    '16/2/0/16',
    '16/2/1/5'

];

$array = preg_grep('~^16/2/0/\d+$~', $array);

print_r($array);

输出

Array
(
    [0] => 16/2/0/13
    [1] => 16/2/0/16
)

Sandbox

正则表达式

  • ^匹配字符串的开头
  • 16/2/0/-字面匹配(在字符串的开头,请参见上文)
  • \d+任何一位或多位数字
  • $匹配字符串的结尾

因此,正则表达式是一种进行模式匹配的方法,在这种情况下,模式为16/2/0/{n},其中{n}是任意数字。因此,通过这样做,我们只能找到与该模式匹配的那些项目。

然后,如果您有重复项,则可以执行array_unique()并轻松删除。

有许多方法可以通过自定义回调等来完成array_filter。但这是最直接的方法(如果您知道Regex)。

答案 1 :(得分:1)

使数组唯一,然后提取digits/digits/NOT 1/digits的项目:

$array = preg_grep('#^\d+/\d+/[^1]/\d+#', array_unique($array));