首页 > 解决方案 > 如果值与PHP中数组中的其他值相关,如何从数组中删除数组?

问题描述

我有一个数组,想删除相关的值形式数组。

前任。

在数组 [0] 中有 1/2/3 并且 [1] 有 1/2/3/4 然后 [0] 与 [1] 相关,因此从数组中删除具有 1/2/3 的 [0]。

另一个例子是

前任。

[2] 有 1/2/5,[3] 有 1/2/5/6,[4] 有 1/2/5/6/7 然后 [2] 和 [3] 取决于 [4] 所以删除[2] 和 [3] 都是数组形式的数组。

有关更多详细信息,请查看以下示例。

Array
(
    [0] => Array
        (
            [id] => 1/2/3
        )

    [1] => Array
        (
            [id] => 1/2/3/4
        )

    [2] => Array
        (
            [id] => 1/2/5
        )

    [3] => Array
        (
            [id] => 1/2/5/6
        )

    [4] => Array
        (
            [id] => 1/2/5/6/7
        )
)

想要输出:

Array
(

    [0] => Array
         (
            [id] => 1/2/3/4
        )


    [1] => Array
        (
            [id] => 1/2/5/6/7
        )
)

我不知道我该怎么做。是否可以?

标签: phparraysregex

解决方案


当然这是可能的。您需要先对元素进行排序,然后这非常简单。

<?php

$input = [
  [ "id" => "1/2/3" ],
  [ "id" => "1/2/3/4" ],
  [ "id" => "1/2/5" ],
  [ "id" => "1/2/5/6" ],
  [ "id" => "1/2/5/6/7" ]
];

//firstly sort this array in reverse order
//like so 1/2/3/4 is before 1/2/3
usort(
  $input,
  function($e1, $e2) {
    return $e2["id"] <=> $e1["id"];
  }
);

$output = array_reduce(
  $input,
  function($out, $el) {
    if (empty($out)) {
      $out[] = $el;
    } else {
      $lastEl = $out[count($out) - 1];
      //we add element to the result array
      //only if actual last element doesn't begin with it 
      if (strpos($lastEl['id'], $el['id']) !== 0) {
        $out[] = $el;
      }
    }
    return $out;
  },
  []
);

var_dump($output);

推荐阅读