Я хотел бы знать, как я могу повторять SplHeap или SplPriorityQueue более одного раза.SplPriorityQueue :: next() удаляет элемент
следующий() метод удаляет последний элемент, поэтому второй foreach (или for) не получает никакого результата.
Пример:
<?php
class Teste extends SplPriorityQueue {}
$teste = new Teste();
$teste->insert('A', 1);
$teste->insert('B', 3);
$teste->insert('D', 5);
$teste->insert('C', 2);
$teste->insert('A', 4);
echo '<pre>';
var_dump($teste->count());
echo '<br>';
foreach($teste as $t)
var_dump($t);
echo '<br>';
var_dump($teste->count());
Возвращает:
int(5)
string(1) "D"
string(1) "A"
string(1) "B"
string(1) "C"
string(1) "A"
int(0) <--- I need this to still be 5
Мне нужно вставить элементы, основанные на методе сравнения(), например: http://php.net/manual/en/splheap.compare.php
Спасибо!
спасибо за Ваш ответ. Но что, если я хотел использовать SplObjectStorage с автоматически отсортированными объектами, например, SplHeap делает с помощью метода compare()? –
Я не на 100% понят, что вы просите, но вы можете сделать это без проблем. – salathe