• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

[erledigt] arrays "durchsuchen"

Status
Für weitere Antworten geschlossen.

Fätzminator

Neues Mitglied
hallo zusammen

der titel ist nicht so vielsagend, weil man das einfach nicht mit so wenigen zeichen beschreiben kann :lol:
dieses problem hatte ich schon in mysql gestellt, allerdings stellte ich da die frage zur technik, die ich anwenden solle...
ich habe ein news-archiv, in dem alle news ausser die neusten 5 angezeigt werden sollen. wenn man auf ein datum klickt in der hauptsite werden die beiträge des jeweiligen jahres gezeigt, was für mich zum filtrieren kein problem darstellt. allerdings würde ich gerne wissen, wie ich alle jahre, die vorkommen, ausgeben soll.... ich kann dies nicht in der mysql abfrage gleich machen, weil es eben "timestamps" im format "xxxx-xx-xx xx:xx:xx" sind! wenn nur das erscheinungsjahr da wäre, könnte ich einfach nach dem gruppieren...
also habe ich alle daten in $row['date']...
kann mir da jmd helfen?

mfg, fätzminator
 
Werbung:
wenn du die einträge nach datum sorteirt hast (mit mysql) einfach ab eintrag 5 alle anzeigen lassen...
 
Werbung:
ja das weiss ich schon...
aber ich hab doch schon im anderen thread erwähnt, dass dies nach jahren sortiert sein soll (stell dir vor, du müsstest alle seiten durchblättern, bis du den eintrag des jahres 2001 findest...)!
ich dachte auch, dass dies kein problem sei... aber alle einträge des richtigen jahres per mysql auszugeben ist ja auch nicht schwer...
@CrackPod
stell dir vor du hast 3 datenbankeinträge (wenn wir die neusten 5 entfernen), hier zeige ich nur mal das feld "date":
2003-11-21 16:35:46
2004-03-25 07:29:17
2004-06-01 18:59:43

dann will ich 2 links haben, der eine mit "2003" und der andere mit "2004" beschriftet... das kann ich durch ein split erreichen, dass ich in einem array nur die jahreszahlen aller einträge habe! aber soll ich nun wirklich ein zweites generieren, um herauszufinden welche einträge doppelt sind?

mfg, fätzminator
 
Die datums angabe wandelst du mit strtotime in eine timestamp um.
Danach läst du dir mit date die jahreszahl angeben.
Wenn sie nicht zutrifft wird es nicht angezeigt das kannst du in der foreach schleife prüfen lassen...
 
Werbung:
[php:1:fc7807dea3]<?php
$year = 2005;

if(date('Y', strtotime($row['year'])) == $year)
{
// Ausgeben
}
?>[/php:1:fc7807dea3]
 
also in array suchen kann man glaub ich so:

if(in_array("suche",deinarray))..

ich bin mir nur nicht sucher ob es deinarray[] oder deinarray heißt!
 
Werbung:
so kannst du alle beiträge eines jahres anzeigen lassen soweit ich weiß was das alles was du wolltest...
 
? Das ist doch automatsich der fall. wenn ein jahr keinen eintrag hat kann es ja auch nicht ausgeben werden. beschreibe bitte mal genauer und präziser das problem...
 
Werbung:
Das macht doch mein script? wie du die jahreszahl die gesucht ist übergibst musst du doch wissen... :?
 
aber ich will alle jahreszahlen in einer liste ausgaben...
es ist für mich kein problem, einfach das jahr jedes beitrags herauszufiltern, dann habe ich aber jahre doppelt...
 
Werbung:
[php:1:d94dc47588]<?php
$beitrag = array(); // ganz viele beiträge...
$year = 2005; // aktuelle jahr
foreach($beitrag as $index => $value) // jeden beitrag durchlaufen
{
if(date('Y', strtotime($value['year'])) == $year) // wenn beitrags jahr richtig
{
echo $value['year'].$value['title'];// Ausgeben oder wie auch immmer

unset($beitrag[$index]); /* damit ausgegebene beiträge bei den folgenden sschleifen keine zeit verbrauchen */
}
}
?>[/php:1:d94dc47588]

das sooft di jahre hast. must halt nur jedes mal die jahreszahlt ändern. lässt die ganz leicht mit einer ummantenden for schleife regeln welches die jahre abzählte....
wegen dem fünften beitrag noch einen counter einbauen der abzählt wie viele betreits gezeigt wurden. (aufpassen: nur im if den counter inkrementiren)
 
erledigt!
so sieht es nun aus:
[php:1:dd7e517519]<?php
//...
if(($todo=="new" && $news_rights>0) || ($todo=="edit" && $news_rights>1)) {
//...
} elseif($todo=="del" && $news_rights>2) {
//...
} else {
if(isset($_GET['year'])) {
$query = "SELECT * FROM `mod_news` ORDER BY `timestamp` DESC LIMIT 5 , 100";
$result = mysql_query($query);
//...
while($row = mysql_fetch_array($result)) {
$timestamp = split(" ",$row["timestamp"]);
$timestamp = split("-",$timestamp[0]);
if($timestamp[0]==$_GET['year']) {
//...
}
}
//...
} else {
$query = "SELECT `timestamp` FROM `mod_news` ORDER BY `timestamp` DESC LIMIT 5 , 10000";
$result = mysql_query($query);
//...
while($row = mysql_fetch_array($result)) {
$timestamp = split(" ",$row["timestamp"]);
$timestamp = split("-",$timestamp[0]);
if(!@in_array($timestamp[0], $years))
$years[] = $timestamp[0];
}
for($i=0; $i<count($years); $i++)
echo "<h5><a href=\"?site=special&amp;year=".$years[$i]."\">".$years[$i]."</a></h5>";
//...
}
}
?>[/php:1:dd7e517519]
trotzdem vielen dank für die hilfe!

mfg, fätzminator
 
Werbung:
Status
Für weitere Antworten geschlossen.
Zurück
Oben