PHP.mk документација

RecursiveArrayIterator

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

class.recursivearrayiterator.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека class.recursivearrayiterator.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
RecursiveArrayIterator

Референца за `class.recursivearrayiterator.php` со подобрена типографија и навигација.

class.recursivearrayiterator.php

Класата RecursiveArrayIterator

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

Вовед

Овој итератор овозможува поништување и менување на вредности и клучеви при итерирање преку низи и објекти, на истиот начин како и ArrayIterator. Дополнително, можно е да се итерира преку тековната ставка на итераторот.

Синопсис на класата

class RecursiveArrayIterator extends ArrayIterator implements RecursiveIterator {
/* Наследни константи */
/* Константи */
public const int CHILD_ARRAYS_ONLY;
/* Методи */
public hasChildren(): bool
/* Наследени методи */
public ArrayIterator::__construct(array|object $array = [], int $flags = 0)
public ArrayIterator::seek(int $offset): void
}

Претходно дефинирани константи

Знаменца на RecursiveArrayIterator

RecursiveArrayIterator::CHILD_ARRAYS_ONLY

Третирај само низи (не објекти) како да имаат деца за рекурзивно итерирање.

Содржина

Белешки од корисници 4 белешки

c точка 1 на smithies точка org
пред 14 години
If you are iterating over a multi-dimensional array of objects, you may be tempted to use a RecursiveArrayIterator within a RecursiveIteratorIterator. You are likely to get baffling results if you do. That is because RecursiveArrayIterator treats all objects as having children, and tries to recurse into them. But if you are interested in having your RecursiveIteratorIterator return the objects in your multi-dimensional array, then you don't want the default setting LEAVES_ONLY, because no object can be a leaf (= has no children).

The solution is to extend the RecursiveArrayIterator class and override the hasChildren method appropriately. Something like the following might be suitable:

<?php
class RecursiveArrayOnlyIterator extends RecursiveArrayIterator {
  public function hasChildren() {
    return is_array($this->current());
  }
}
?>
Of course, this simple example will not recurse into ArrayObjects either!
mccarthy dot richard at gmail dot com
пред 15 години
Using the RecursiveArrayIterator to traverse an unknown amount of sub arrays within the outer array. Note: This functionality is already provided by using the RecursiveIteratorIterator but is useful in understanding how to use the iterator when using for the first time as all the terminology does get rather confusing at first sight of SPL!

<?php
$myArray = array(
    0 => 'a',
    1 => array('subA','subB',array(0 => 'subsubA', 1 => 'subsubB', 2 => array(0 => 'deepA', 1 => 'deepB'))),
    2 => 'b',
    3 => array('subA','subB','subC'),
    4 => 'c'
);

$iterator = new RecursiveArrayIterator($myArray);
iterator_apply($iterator, 'traverseStructure', array($iterator));

function traverseStructure($iterator) {
    
    while ( $iterator -> valid() ) {

        if ( $iterator -> hasChildren() ) {
        
            traverseStructure($iterator -> getChildren());
            
        }
        else {
            echo $iterator -> key() . ' : ' . $iterator -> current() .PHP_EOL;    
        }

        $iterator -> next();
    }
}
?>

The output from which is:
0 : a
0 : subA
1 : subB
0 : subsubA
1 : subsubB
0 : deepA
1 : deepB
2 : b
0 : subA
1 : subB
2 : subC
4 : c
Едгар
3 години пред
<?php 
$array = [
'A','B',
'C'=>[
    'D','E',
    'F'=>['G','H']
 ],
'I','J'
];

$iterator = new RecursiveArrayIterator($array);

foreach($iterator as $key=>$value)
{
    echo $key,':', $value,'<br>';
}

/**
Output
0:A
1:B
C:Array
2:I
3:J
*/

//-------------
//Recursive...

$array = [
'A','B',
'C'=>[
    'D','E',
    'F'=>['G','H']
 ],
'I','J'
];

$it = new RecursiveArrayIterator($array);
$iterator = new RecursiveIteratorIterator($it);

foreach($iterator as $key=>$value)
{
    echo $key,':', $value,'<br>';
}

/**
Output
0:A
1:B
0:D
1:E
0:G
1:H
2:I
3:J
*/

?>
lemoinem dot remove at me dot mlemoine dot name
12 години пред
The RecursiveArrayOnlyIterator behaviour c dot 1 at smithies dot org presented can also be achieved using the (undocumented) flag RecursiveArrayIterator::CHILD_ARRAYS_ONLY (https://github.com/php/php-src/blob/master/ext/spl/spl_array.c#L1970 and https://github.com/php/php-src/blob/master/ext/spl/spl_array.c#L1620)
На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.