【问题标题】:php array unset not workingphp数组未设置不起作用
【发布时间】:2013-07-06 18:35:01
【问题描述】:

我有一个称为“值”的多维数组。这就是var_dump($values) 现在的样子。

array(1) { 
    [0]=> array(3) { 
        ["content"]=> array(1) { 
            ["items"]=> array(4) { 
                [0]=> string(4) "3121" 
                [1]=> string(4) "3116" 
                [2]=> string(4) "3115" 
                [3]=> string(4) "3114" 
            } 
        } 
        ["options"]=> array(8) { 
            ["title"]=> string(7) "inherit" 
            ["size"]=> string(4) "tiny" 
            ["orderby"]=> string(4) "date" 
            ["order"]=> string(4) "desc" 
            ["filter"]=> string(8) "category" 
            ["pagination"]=> bool(false) 
            ["per_page"]=> int(12) 
            ["content"]=> array(3) { 
                [0]=> string(5) "title" 
                [1]=> string(7) "excerpt" 
                [2]=> string(4) "tags" 
            } 
        } 
        ["__version"]=> string(5) "2.3.1" 
    }
}

这是我用来取消设置值的代码

 //before unset
    var_dump($values);

    $ID = "3121";
    foreach ($values as $value) {
                    foreach($value['content']['items'] as $key => $val) {               
                    if($val == $ID) {
                     unset($value['content']['items'][$key]);
                     }
                    }
        }

   //after unset
    var_dump($values);

即使未设置,我的 var_dump 看起来也一样。我认为我的阵列未设置不起作用。谁能告诉我我的代码有什么问题?

【问题讨论】:

    标签: php multidimensional-array


    【解决方案1】:

    在 php 中数组是按值传递而不是按引用更改

     foreach ($values as $value) {
    

     foreach ($values as &$value) {
    

    有关相关文档,请参阅 here

    【讨论】:

    • 优秀.. 解决了它。
    • @Giri 请记住在 for 循环结束后使用 unset($value)(这将删除 REFERENCE,NOT 变量),或者你有一个无用的引用在您的代码(这实际上意味着如果您删除最后一个值,例如使用array.pop,它将保留在内存中,因为您在其他地方引用它)
    • @h2ooooooo 感谢您的建议。真的很有帮助。
    【解决方案2】:

    您没有在 for 循环中放置 $key 变量,要更改值,您必须使用引用

    foreach ($values as &$value) {
      foreach($value['content']['items'] as $key => $val) {               
          if($val == $ID) {
              unset($value['content']['items'][$key]);
          }
      }
    }
    

    【讨论】:

    • 嘿,即使添加了关键变量,它看起来仍然一样
    【解决方案3】:

    foreach ($values as &$value)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-29
      • 2023-03-06
      • 2014-03-03
      • 2016-07-06
      • 1970-01-01
      • 2012-07-20
      • 2017-03-17
      • 2011-07-23
      相关资源
      最近更新 更多