【问题标题】:Emptying a PHP array清空 PHP 数组
【发布时间】:2011-02-01 12:33:57
【问题描述】:

我想清除数组对象中的所有元素(可以是标准的 PHP 数组、ArrayObject 或基本上任何其他实现基本数组接口的对象,例如 Itertable、ArrayAccess、Countable 等)。但是,我不想恢复该对象,所以我不得不取消设置所有单个元素,而不是创建一个相同类型的新对象。有没有简单的方法可以做到这一点?

【问题讨论】:

  • 你为什么不想恢复一个对象/数组?
  • 因为对象是一个函数参数,我不一定知道它从哪里来或者如何实例化它。

标签: php arrays


【解决方案1】:
foreach ($array as $key => $element) {
    unset($array[$key]);
}

这需要TraversableArrayAccess,不需要Countable。或者显然只是一个普通的数组。

【讨论】:

  • 使用它给我以下错误:ArrayIterator::next(): Array was modified outside object and internal position is no longer valid
  • @mrjames:嗯,看起来 arrayiterator 非常严格。在 arrayobject 上,我会简单地调用 exchangeArray,但 arrayiterator 没有这样的东西。
【解决方案2】:

我不完全确定您为什么需要这样做,但在回答您的问题时,您应该能够简单地使用 array_splice 函数从数组中删除所有对象;

$my_array = array('A', 'B', 'C');
array_splice($my_array, 0);

我从未使用 array_splice 从数组中删除所有对象,但我认为它的工作方式相同。

【讨论】:

  • @nikic 啊,我的错。为您的答案投票,因为它更符合问题标准!
【解决方案3】:

我无法理解问题的真正含义。将数组/迭代器替换为空迭代器(EmptyIterator,或另一个没有值的迭代器?)可能就足够了。

$array = new EmptyIterator;

【讨论】:

    【解决方案4】:

    试试

    $my_array = array('A', 'B', 'C');
    unset($my_array);
    

    【讨论】:

      【解决方案5】:

      简单的未设置呢?

      未设置($array);

      【讨论】:

        【解决方案6】:

        如果您从数组中删除最后一条记录,则下一个 foreach 循环可能会失败(内部调用 $this->next() )

        所以它帮助我测试了有效性并在这种情况下打破了下一个循环。

        deleteOffset = true;
        
        foreach ($iterator as $key => $value)
            {
                    if ($deleteOffset && $iterator->offsetExists($key) ) 
                    {
                         $iterator->offsetUnset($key);                                       
                    }                
        
                //if remove last record than the foreach ( $this->next() ) fails so 
                //we have to break in this case the next ->next call         
        
                if (!$iterator->valid()) break;
        
            }
        

        【讨论】:

          【解决方案7】:

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-04-05
            • 2015-06-22
            • 1970-01-01
            • 2011-04-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-06-19
            相关资源
            最近更新 更多