删除数组字段和值

时间:2017-09-18 14:36:42

标签: php arrays laravel-5

当我dd($test)时,我有以下数组:

array:1 [
  0 => {#81
   +"1": "1"
   +"2": "2"
  }
]

我希望删除第二个字段和值,以便输出

array:1 [
  0 => {#81
   +"1": "1"
  }
]

我一直在尝试使用array_spliceunset,但它没有得到我想删除的字段和值,我做错了什么?我该如何实现?提前谢谢。

3 个答案:

答案 0 :(得分:1)

我发现有两种方法可以重新创建,只有一种方法在使用unset时有效。

方法1 - 使用(object)[];

$test = [
  (object)[
    "1" => "1",
    "2" => "2"
];

方法2 - 使用stdClass()

$array = new stdClass();

$array->{"1"} = "1";
$array->{"2"} = "2";

$test = [
  $array
];

此时,我尝试unset() $test中第一个条目的第二个关键字:{/ 1>

unset($test[0]->{"2"});

dd($test);

dd($test);之后的unset()输出为:

// Approach 1
array:1 [▼
  0 => {#407 ▼
    +"1": "1"
    +"2": "2"
  }
]

// Approach 2
array:1 [▼
  0 => {#407 ▼
    +"2": "2"
  }
]

在使用unset()时,似乎使用stdClass()按预期工作,但如果您像我在方法1中尝试的那样将array转换为objectunset()看起来会起作用,但实际上并没有做任何事情。

我能让方法1工作的唯一方法是:

foreach($test AS $tKey => $array){
  $array = (array)$array;
  foreach($array AS $aKey => $value){
    if($key == 2){
      unset($array[$aKey]);
    }
  }
  $test[$tKey] = (object)$array;
}

哪个有效,但似乎效率低下,因为我将已铸造的数组封装为array,然后再返回object。希望这能让您对这个问题有所了解。

答案 1 :(得分:1)

我不确定为什么unset不适合你,但这段代码

<?php

$var = [
    0 => [
           "1" => "1",
           "2" => "2",
        ]
    ];

var_dump($var);

unset($var[0]["2"]);

var_dump($var);

将产生此输出:

array(1) {
  [0]=>
  array(2) {
    [1]=>
    string(1) "1"
    [2]=>
    string(1) "2"
  }
}

array(1) {
  [0]=>
  array(1) {
    [1]=>
    string(1) "1" /// leaving only the one you needed
  }
}

您可以在此处查看:https://3v4l.org/37X5s

答案 2 :(得分:-1)

我猜你在这里打印的代码格式不正确但无论如何,要从php上的关联数组中删除项目键和值,你使用php unset($var)函数。 举个例子 $data = array("key1"=>"value1", "key2"=>"value2"); 当我打电话给unset($data["key2"]);$data现在变为仅包含键1和值1.