PHP har aldrig været helt glad for [] efter parenteser. Virker det hvis du siger
$temp = end($HistoryItems);
echo $temp[0];
i stedet?
Se, det overvejede jeg faktisk også - jeg slog det bare hen, da jeg håbede, PHP var lidt mere solidt bygget :) Men skidt, jeg prøver i morgen.
Jeg kan bekræfte viperine's observation - jeg har testet både i php4 og php5 og med alle tænkelige kombinationer af (), {} og [] paranteser, men jeg kan ikke få den til at acceptere [] efter andet end en $variabel ligesom fx javascript kan.
Løsningen med $temp er også den bedste jeg har hørt om til dato (men jeg vil meget gerne overraskes).
Utroligt!
På den ene side er det skidt, at PHP-fortolkeren er så ringe gennemført...
På den anden side er det rimelig dejligt, at ikke er min fejl ;) For en gangs skyld kan jeg tillade mig at sige, at det hele er PHP's skyld!
Tak for jeres kommentarer - smid vensligst et svar hver.
Og jeg vil forresten stadig gerne have en, om ikke andet, kort-efter-post-rettefunktion på Eksperten... Ellers går det helt galt, når man bliver så træt, som jeg er nu :P
Hm. Jeg har haft diverse problemer med arrays i arrays og løst dem ved at erstatte hele lortet med et enkelt array bestående af instanser af klassen Page. Dog har jeg stadig et problem:
$HistoryItems = array();
for ($currentPage = $Page_Properties[0]; $currentPage != ""; $temporary = Database::GetRow($Table_Pages, "parent, title", "WHERE location='".$currentPage."'"), $HistoryItems = array_push($HistoryItems, new Page($currentPage, $temporary[0], $temporary[1])))
$currentPage = $temporary[0];
if (end($HistoryItems).L != Settings::$Index && $Page_Location != Settings::$Index)
$HistoryItems = array_push($HistoryItems, new Page(Settings::$Index, "", Database::GetCell($Table_Pages, "title", "WHERE location='".Settings::$Index."'", 0) or die(mysql_error())));
$History = "";
$Temporary = array_reverse($HistoryItems);
foreach ($Temporary as $historyItem)
PHP insisterer på, at $Temporary ikke er et array. Hvorfor?
Hvis det har noget interesse, er Page-klassen opbygget som følger:
class Page
{
public $L;
public $P;
public $T;
function __construct($location, $parent = "", $title = "")
{
$this->L = $location;
$this->P = $parent;
$this->T = $title;
}
}
Faktisk brokker PHP sig allerede ved $Temporary = array_reverse($HistoryItems);... Men det kunne man jo have sagt sig selv ;)
Der er i hvert fald et problem her:
$HistoryItems = array_push($HistoryItems, new Page(/* en masse kode */));
array_push() returnerer nemlig antal af elementer i array'et, så faktisk overskriver du indholdet af $HistoryItems med et tal. Problemet kan undgås ved bare at bruge:
array_push($HistoryItems, new Page(/* en masse kode */));
eller bare:
$HistoryItems[] = new Page(/* en masse kode */);
Hov! Jeg troede, array_push returnerede det samlede array og ikke i sig selv modificerede basen... Meh. Jeg retter lige igennem.
Igen besluttede Eksperten sig for at slette min post! Hvornår bliver den fejl rettet?!
Anyway. Her er min tidligere besked:
Christ!
Nu har jeg omskrevet hele koden med henblik på optimering og større anvendelse af OOP. Det gør det hele mere overskueligt - det er bare et problem:
99 for ($current =& Page::$CurrentPage; $current; $current =& Page::GetPage($current->Parent)
100 array_push($hierarchyItems, $current);
101 unset($current);
Parse error: syntax error, unexpected T_STRING, expecting ')' in /customers/ovrkll.com/ovrkll.com/httpd.www/development/index.php on line 100
Hvorfor får jeg denne fejl?
Du mangler en ) sidst i linje 99.
Ja, selvfølgelig :) Mange tak!
Lige en sidste ting (forhåbentligt):
104 $hierarchyItems = array_reverse($hierarchyItems);
105 $hierarchy = "";
106 foreach ($item as &$hierarchyItems)
Warning: Invalid argument supplied for foreach() in /customers/ovrkll.com/ovrkll.com/httpd.www/development/index.php on line 106
Har du ikke vendt den om? Skulle det ikke være
foreach (&$hierarchyItems as $item)
?
Jo. Min hjerne er vist ved at brænde sammen... Damn.
Anyway, her er nogle points. Jeg opretter lige et andet spørgsmål om et nyt problem.