从php中的多维数组中删除相关元素

时间:2018-05-22 07:27:39

标签: php arrays multidimensional-array

我有一组像这样的图像数据:

[other-image] => Array
        (
            [img] => Array
                (
                    [0] => 1526973657.jpg
                    [1] => 1526973661.jpg
                    [2] => 1526973665.jpg
                )

            [path] => Array
                (
                    [0] => ../post-upload/1/
                    [1] => ../post-upload/1/
                    [2] => ../post-upload/1/
                )

            [type] => Array
                (
                    [0] => 1
                    [1] => 1
                    [2] => 1
                )

            [thumb] => Array
                (
                    [0] => thumb_1526973661.jpg
                    [1] => thumb_1526973665.jpg
                    [2] => thumb_1526973668.jpg
                )

        )

现在我要删除一个图像,它是来自子数组的所有相关数据。 (路径,类型,拇指数据)

这是我在php中尝试的方式:

  $delkey = '1526973657.jpg';
  if(in_array($delkey, $_SESSION['other-image']['img'])){
      $imgkey = array_search($delkey, $_SESSION['other-image']['img']);
      if($imgkey) unset($_SESSION['other-image']['img'][$imgkey]);
  }

但问题是我无法从其他数组中删除相关数据。 谁能告诉我怎么做? 谢谢。

3 个答案:

答案 0 :(得分:1)

相关数据与img的密钥是否相同? 如果它们相同,我认为您只需要添加一些代码来删除其他数据,例如用于删除img的方式。

if($imgkey) unset($_SESSION['other-image']['path'][$imgkey]);
if($imgkey) unset($_SESSION['other-image']['type'][$imgkey]);
if($imgkey) unset($_SESSION['other-image']['thumb'][$imgkey]);

答案 1 :(得分:1)

如果img子数组中的键与子数组(路径,类型和拇指)中的相同键(索引)相关,您也可以取消设置这些键。例如

$delkey = '1526973657.jpg';
if(in_array($delkey, $_SESSION['other-image']['img'])){
    $imgkey = array_search($delkey, $_SESSION['other-image']['img']);
    if($imgkey){
        unset($_SESSION['other-image']['img'][$imgkey]);
        unset($_SESSION['other-image']['path'][$imgkey]);
        unset($_SESSION['other-image']['type'][$imgkey]);
        unset($_SESSION['other-image']['thumb'][$imgkey]);
    }
}

答案 2 :(得分:1)

您应该在!==false之后使用array_search(),因为它可能会返回第一个索引,在某些情况下会返回0,因此您的条件不会被执行。关于从其他阵列中删除相关数据,您必须取消设置与该密钥相关的其他数据。

if($imgkey!==false){
        unset($_SESSION['other-image']['img'][$imgkey]);
        unset($_SESSION['other-image']['path'][$imgkey]);
        unset($_SESSION['other-image']['type'][$imgkey]);
        unset($_SESSION['other-image']['thumb'][$imgkey]);
    }