Bir dizi bağlantılı listesi için not bir kaptır. A linked list is a list with linked ilişkileri nesneler ile bir liste, a> değil nesneleri. Temelde, ne var iki kapların en kötüsü. Ben diğer bazı veriler kabın içine yapısını dönüştürmek için denemek istiyorum; Gerçek bir bağlantılı liste verilerinizi sıralamak gerekirse şekilde sıralanması gerekiyor asla.
Iyi bir şekilde böyle bir şey içerecektir. Sana listenin ortasında nesneleri eklemek için yol bırakacağım, o kadar da zor değil.
<?php
class LinkedObject
{
var $value;
var $prev;
var $next;
public function __construct($value, $prev = null, $next = null)
{
$this->value = $value;
$this->prev = $prev;
$this->next = $next;
}
public function append(LinkedObject $insertee)
{
$link = $this;
while($link->next != null)
$link = $link->next;
$link->next = $insertee;
$insertee->prev = $link;
}
public function __toString()
{
$str = $this->value;
if($this->next != null)
{
$str .= " » ";
$str .= $this->next;
}
return $str;
}
}
$head = new LinkedObject("foo");
$head->append(new LinkedObject("bar"));
$head->append(new LinkedObject("baz"));
echo $head . "\n"; // gives "foo » bar » baz"
?>
Bazı okült nedenle gerçekten, gerçekten onları bir diziye ihtiyacınız varsa, burada ihtiyacınız ne olduğunu:
<?php
function find_row($array, $id)
{
foreach($array as $current_row)
{
if($current_row['id'] === $id)
return $current_row;
}
return null;
}
function what_the_heck_sort($array)
{
$start_record = $array[0];
$working_record = $array[0];
$result = array($working_record);
while($working_record['prev'] !== null)
{
$working_record = find_row($array, $working_record['prev']);
array_unshift($result, $working_record);
}
$working_record = $start_record;
while($working_record['next'] !== null)
{
$working_record = find_row($array, $working_record['next']);
array_push($result, $working_record);
}
return $result;
}
// the test code
$test = array(
array("foo 01", 'id' => 0, 'prev' => null, 'next' => 1),
array("foo 02", 'id' => 1, 'prev' => 0, 'next' => 2),
array("foo 03", 'id' => 2, 'prev' => 1, 'next' => 3),
array("foo 04", 'id' => 3, 'prev' => 2, 'next' => 4),
array("foo 05", 'id' => 4, 'prev' => 3, 'next' => 5),
array("foo 06", 'id' => 5, 'prev' => 4, 'next' => 6),
array("foo 07", 'id' => 6, 'prev' => 5, 'next' => 7),
array("foo 08", 'id' => 7, 'prev' => 6, 'next' => 8),
array("foo 09", 'id' => 8, 'prev' => 7, 'next' => 9),
array("foo 10", 'id' => 9, 'prev' => 8, 'next' => null));
shuffle($test);
print_r(what_the_heck_sort($test));
?>
Ama gerçekten, kendinize bir iyilik yapın ve gerçek bir bağlantılı liste yapmak, nesneleri değil, dizileri kullanarak. Yukarıdaki sıralama yöntemi, benim görüşüme göre, kısıtlamaları bilerek oldukça iyi olduğunu, ancak her id için dizi aramak gerekiyor çünkü ridiculously slow bulunuyor.