Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > PHP > PHP-Programmierung > Den Inhalt zweier Arrays zusammenführen
Antwort
 
Themen-Optionen
Alt 07.07.2008, 16:06   Nach oben    #1
Neuer Benutzer
 
Registriert seit: 07.07.2008
Beiträge: 7
Standard Den Inhalt zweier Arrays zusammenführen

Hallo,

eventuell kann mir jemand helfen, folgende Fragestellung:

Ich bastel gerade an einem (für mich nicht mehr ganz simplen) Formular-Skript, das ich zur Administration einer einzelnen News-Seite benutzen möchte.

Ich habe zwei Formularfelder, deren Inhalte ich an zwei seperate Arrays übergebe, einen für Headlines + einen für längeren Text.

Gegen Ende des Skripts möchte ich nun die einzelnen Headlines und Texte wieder kombinieren und auf meiner html-seite ausgeben.

Ich mache das in etwa folgendermaßen, bekomme so aber natürlich alle Headlines zuerst untereinander und dann alle Texte.

Code:
        foreach ($head_array as $head) {
            ?>
            <div>
               <?=$head ?>    
            </div>
            <?php
        }
        
        foreach ($text_array as $text) {
            ?>
            <div>
            <?=$text ?>        
            </div>         
            <?php
        }
Könnte ich diese foreach-Schleifen sinvoll verschachteln? Folgender Ansatz geht anscheinend wohl nicht:

Code:
       foreach ($head_array as $head && $text_array as $text) {
            ?>
            <div>
               <?=$head ?>
               <?=$text ?>      
            </div>
            <?php
        }
Bin selbst leider etwas ratlos, da ich bisher nicht viel in php gemacht habe.

Würde mich über jeden Denkanstoss freuen.

Bei Fragen gerne fragen, manchmal ergibt sich die Lösung in einer kleiner Diskussion..

Herzlichen Dank erstmal für jede Antwort,

Gruß, Steffen
herz42 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.07.2008, 16:17   Nach oben    #2
Der Student
 
Benutzerbild von Flor1an
 
Registriert seit: 03.01.2007
Ort: München
Beiträge: 86
Standard

Ein kurzer Blick ins Manual hätte doch auch mal sein können oder? Da gibts genug Array Funktionen um zwei Arrays zusammen zu fügen.

array_merge() fügt zwei Arrays zusammen. Wenn allerdings die gleichen Keys in den Arrays existieren werden die Werte überschrieben.

Wenn du einfach die Arrays durchgehen möchtest kannst du es auch folgend machen, allerdings müssen hierfür die zugehörigen Wertepaare den selben Key im Array besitzen.

PHP-Code:
foreach ($head_array as $key => $value) {
    echo 
'<div>'.$value.$text_array[$key].'</div>';

__________________
Wenn ich du wäre, wäre ich lieber ich.

http://www.clubstars.net
http://www.x-tinct.de

Geändert von Flor1an (07.07.2008 um 16:20 Uhr).
Flor1an ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.07.2008, 16:22   Nach oben    #3
Erfahrener Benutzer
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 662
Standard

Es wäre natürlich interessant, wie die Informationen in die Arrays kommen. Wenn du zum Beispiel eine Datenbank-Abfrage machst, musst du nur innerhalb der Schleife in der die Ergebnisse abgearbeitet werden beide Felder ausgeben.

Wenn du die Arrays hingegen irgendwo anders befüllst - wo auch immer - und die Struktur nicht verändern möchtest, kannst du auch einfach folgendes machen:

PHP-Code:
<?php
$integerCount 
count ($arrayTitel); // Hier könntest du auch das andere Array nehmen, solange beide eine gleiche Anzahl an Werten haben ist das Ergebnis das Gleiche

for ($integerCurrent 0;
     
$integerCurrent $integerCount;
     
$integerCurrent++
     )
{
?>
<div>
  <?=$arrayTitel[$integerCurrent];?>
  <?=$arrayText[$integerCurrent];?>      
</div>
<?php
}
?>
Ich rate allerdings dazu die Ausgabe von "<?=$variable;?>" in "<?php echo $variable;?>" zu ändern, um auf Servern, bei denen die Short-Open-Tags deaktiviert sind, keine Probleme zu bekommen.
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.07.2008, 16:41   Nach oben    #4
Neuer Benutzer
 
Registriert seit: 07.07.2008
Beiträge: 7
Standard

Hi,

Habe mehrere Referenzen offen. Mit einem "multidimensionalem Array" hat es z.B. nicht funktioniert..

Ich probiere mal das zweite Beispiel mit Schlüssel und Wert aus. Dafür muss ich einen Key/eine Art Identifier mit auf den Weg geben?

Hätte es aber auch wohl konkreter beschreiben sollen:

Der Sinn zweier Arrays ist für mich in diesem Fall, dass ich die Inhalte später in verschiedene divs schicken möchte, um sie unterschiedlich zu formatieren, in sofern eher:

Code:
?>

<div class="head">
<?=$head ?>
</div>

<div class="text">
<?=$text ?>      
</div>

<?php
Ich speichere den Inhalt der Formularfelder bisher in jeweils eine Variable/übergebe ihn per POST und schicke diese anschließend in jeweils einen der beide Arrays.

Danke, Mr. NiceGuy, sieht interessant aus, schnalle ich bisher aber nicht.

Danke schonmal für die Antworten -
-------- neuer post --------
Hm, anscheinend doch nachvollziehbar für mich, Mr NiceGuy.

Danke, probiere ich gerade aus.

Steffen
-------- neuer post --------
Fantastisch, funktioniert einwandfrei -

und wesentlich simpler als mein Ansatz.. klasse, vielen Dank.

Ich hoffe, ich darf mich gerne wieder melden, falls ich ins stocken gerate.

Best, Steffen

Geändert von Jann Hendrik (07.07.2008 um 17:42 Uhr). Grund: ich habe die drei posts mal zusammengefasst
herz42 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.07.2008, 17:13   Nach oben    #5
Erfahrener Benutzer
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 789
Standard

Hallo Steffen.

Die Lösung mit einem multidimenaionalen Array wäre aber durchaus schöner (dafür gibts die Dinger ja nun mal). weiter solltest du <?php schreiben, anstatt <?, da dein System damit portabler ist. Dass diese sog. short open tags (<?) akzeptiert werden, kann man nämlich abschalten und das macht auch Sinn, wenn man XHTML-Dateien durch den Parser jagt.

PHP-Code:
<?php
// daten

$aNews = array(
    array(
        
'headline' => 'Nachricht eins',
        
'message'  => 'Hier Nachricht eins …'
    
),
    array(
        
'headline' => 'Nummer zwei',
        
'message'  => 'Nachricht zwei'
    
)
);

// ausgabe

<?php
if (is_array($aNews)) {
?>

<div>

    <?php
    
foreach ($aNews as $aEntry) {
    
?>

    <h2><?php echo $aEntry['headline']; ?></h2>
    <div><?php echo $aEntry['text']; ?></div>

    <?php
    
}
    
?>

</div>

<?php
}
</
div>
Bastian
Basti ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.07.2008, 20:26   Nach oben    #6
Neuer Benutzer
 
Registriert seit: 07.07.2008
Beiträge: 7
Standard

Hi Bastian,

scheint eine interessante Lösung zu sein!

Ich schaffe es im Moment zwar nicht, meine Variablen aus den Formularfeldern an die entsprechenden Stellen im verschachtelten Array zu speichern, aber ich bleibe dran..

Wenn ich das hinbekomme, sicher eine gute Lösung.

Zumal ich nun auch meine Edit-Routine verhauen habe, seit der Lösung mit der for-Schleife. Mal schauen..

Danke auch für den Hinweis zur Syntax.

Gruß, Steffen
herz42 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.07.2008, 21:34   Nach oben    #7
Der Student
 
Benutzerbild von Flor1an
 
Registriert seit: 03.01.2007
Ort: München
Beiträge: 86
Standard

Mh schade das du meinen Post nicht beachtet hast. Bei MrNiceGuys Lösung wäre das Problem dass du immer Integer Werte als Keys brauchst und diese keine Lücken haben dürfen, also fortlaufend sein müssen.

Schau dir doch meine Lösung noch einmal an. Da kannst das auch in zwei Divs schreiben, hast das Problem mit den Keys allerdings nicht, sieht außerdem etwas einfacher aus.
__________________
Wenn ich du wäre, wäre ich lieber ich.

http://www.clubstars.net
http://www.x-tinct.de
Flor1an ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.07.2008, 21:49   Nach oben    #8
Erfahrener Benutzer
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 662
Standard

@Flo: Nicht ganz richtig, denn auch assoziative Arrays haben ein numerisches Pendant, welches fortlaufend gezählt wird.

Dass ein mehrdimensionales Array sinniger wäre ist richtig, hängt jetzt aber erstmal von der Quelle ab von der die Informationen kommen und ob eine "quick and dirty"-Lösung vielleicht ausreichend ist. Leider sind diesbezüglich noch keine Antworten gekommen!?
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.07.2008, 22:15   Nach oben    #9
Der Student
 
Benutzerbild von Flor1an
 
Registriert seit: 03.01.2007
Ort: München
Beiträge: 86
Standard

Zitat:
Zitat von MrNiceGuy Beitrag anzeigen
@Flo: Nicht ganz richtig, denn auch assoziative Arrays haben ein numerisches Pendant, welches fortlaufend gezählt wird.
Was genau meinst du damit?? Du kannst ein assoziatives Array doch nicht mit einer for() Schleife durchgehen die die Werte 0 bis n-1 hat.
__________________
Wenn ich du wäre, wäre ich lieber ich.

http://www.clubstars.net
http://www.x-tinct.de
Flor1an ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.07.2008, 22:37   Nach oben    #10
Neuer Benutzer
 
Registriert seit: 07.07.2008
Beiträge: 7
Standard

Die Werte kommen aus einem Formular, so:

Code:
<div id="inhalt" class="text">
<form action="<?=$_SERVER['PHP_SELF'] ?>" method="POST">
Überschrift:
<br>
<textarea class="textarea_headline" name="headline"></textarea> 
<br>
<br>
Artikeltext:
<br>
<textarea class="textarea_copy" name="copytext"></textarea> 
<br>
<br>
<input style="width:150px" type="submit" name="action" value="Speichern" />
</form>
</div>
Am Anfang der php-Datei definiere ich die hier per POST übergebene "headline" + "copytext" so:

Code:
$headline = $_POST['headline'];
$copytext = $_POST['copytext'];
Den Inhalt dieser beiden variablen würde ich nun in einem nächsten Schritt in einen array speichern, den ich dann später weiterverarbeite, bzw. auslese..

Ich könnte euch ja mal die url posten, wie es zur Zeit aussieht. Dann wird vieleicht auch klarer, welches Ziel ich anstrebe..

Da ich es jetzt ja erst einmal etwas verhauen habe, (bei Interesse) eher morgen..

Ich lese mir gerade noch einiges zum Thema arrays durch, vieleicht wird mir dann ja bereits einiges klarer.

Danke erstmal allen soweit, auch Dir Flo.

Steffen

Geändert von herz42 (07.07.2008 um 22:40 Uhr).
herz42 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.07.2008, 22:54   Nach oben    #11
Erfahrener Benutzer
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 789
Standard

Du musst du Werte doch eh erstmal speichern, also musst du sie doch aus dem Speicher in dein entsprechendes Format auslesen und nicht aus dem Formular.

Im Übrigen bekommst du so ein Array übertragen:
PHP-Code:
<input type="text" name="news_entry[headline]" />
<textarea name="news_entry[text]"></textarea>

Das entspricht dann etwa dem hier:

<?php

$_POST
['news_entry'] = array(
    
'headline' => 'Eintrag in der Textzeile',
    
'text'    => 'Eintrag im Textfeld'
);

?>
Bastian

Geändert von Basti (07.07.2008 um 22:58 Uhr).
Basti ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.07.2008, 23:02   Nach oben    #12
Neuer Benutzer
 
Registriert seit: 07.07.2008
Beiträge: 7
Standard

Klar, mir ist aber zum Beispiel noch nicht ganz klar, wie ich den Inhalt von z.b. "headline" an eine bestimmte stelle eines arrays speichere und dann die nächste eingabe "headline" aus dem formular entsprechend an die zweite stelle, etc..
herz42 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.07.2008, 10:09   Nach oben    #13
Neuer Benutzer
 
Registriert seit: 07.07.2008
Beiträge: 7
Standard

Flo,

vieleicht kannst Du erklären, wie ich in Deinem o.g. Bsp. in 2 divs schreiben kann?! Danke..

Steffen
herz42 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.07.2008, 10:40   Nach oben    #14
Der Student
 
Benutzerbild von Flor1an
 
Registriert seit: 03.01.2007
Ort: München
Beiträge: 86
Standard

Ach komm das kann doch nich so schwer sein:
PHP-Code:
// mit einem div
foreach ($head_array as $key => $value) {
    echo 
'<div>'.$value.$text_array[$key].'</div>';
}  
// mit zwei divs
foreach ($head_array as $key => $value) {
    echo 
'<div>'.$value.'</div><div>'.$text_array[$key].'</div>';

__________________
Wenn ich du wäre, wäre ich lieber ich.

http://www.clubstars.net
http://www.x-tinct.de
Flor1an ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.07.2008, 11:02   Nach oben    #15
Erfahrener Benutzer
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 662
Standard

Zitat:
Zitat von Flor1an Beitrag anzeigen
Zitat:
Zitat von MrNiceGuy Beitrag anzeigen
@Flo: Nicht ganz richtig, denn auch assoziative Arrays haben ein numerisches Pendant, welches fortlaufend gezählt wird.
Was genau meinst du damit?? Du kannst ein assoziatives Array doch nicht mit einer for() Schleife durchgehen die die Werte 0 bis n-1 hat.
Kann ich nicht? Also ich bin mir ziemlich sicher, dass das - abhängig von der Quelle - geht!? *kratzamkopf*

Andererseits habe ich schon ewig nicht mehr mit numerischen Arrays gearbeitet, da ich es für viel zu kompliziert halte.
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.07.2008, 11:59   Nach oben    #16
Neuer Benutzer
 
Registriert seit: 07.07.2008
Beiträge: 7
Standard

Klaro kann das nicht so schwierig sein - wenn man es erst einmal geschnallt hat.. aber dann ist ja alles einfach, gel?

Besten Dank für die Erklärung.

Viele Grüße, Steffen!
herz42 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.07.2008, 14:36   Nach oben    #17
Der Student
 
Benutzerbild von Flor1an
 
Registriert seit: 03.01.2007
Ort: München
Beiträge: 86
Standard

Zitat:
Zitat von MrNiceGuy Beitrag anzeigen
Kann ich nicht? Also ich bin mir ziemlich sicher, dass das - abhängig von der Quelle - geht!? *kratzamkopf*

Andererseits habe ich schon ewig nicht mehr mit numerischen Arrays gearbeitet, da ich es für viel zu kompliziert halte.
Wieso sind numerische Arrays kompliziert? Diese sind im Endeffekt genauso wie assoziative außer dass du anstatt nem numerischen Key einen String hast.

Wenn du in PHP in einem Array die Keys definierst dann kannst du auf das Element nur genau über diesen Key zugreifen, es gibt dann kein numerisches Pendant!
__________________
Wenn ich du wäre, wäre ich lieber ich.

http://www.clubstars.net
http://www.x-tinct.de
Flor1an ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.07.2008, 21:02   Nach oben    #18
Erfahrener Benutzer
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 662
Standard

@Flo: Kompliziert im Sinne von "Ähm, welcher Key war nun nochmal welcher Wert?" Ich finde assoziative Arrays in der Hinsicht deutlich unkomplizierter, zumal ein String-Key deutlich mehr Aussagekraft hat, als ein numerischer Index...

Aber nun gut, dass das so scheinbar doch nicht möglich ist, wie ich erst dachte liegt wohl daran, dass ich - wenn überhaupt - nur im Bezug mit mysql_fetch_array() auf numerische Arrays zugegriffen habe. Dort ist es nämlich so, dass beides parallel existiert. Nunja, da schon genügend helfende Hände an dem "Problem" werkeln, halte ich mich jetzt dezent im Hintergrund
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.07.2008, 22:49   Nach oben    #19
Der Student
 
Benutzerbild von Flor1an
 
Registriert seit: 03.01.2007
Ort: München
Beiträge: 86
Standard

Naja das Problem dürfte ja schon gelöst sein

Ja bei mysql_fetch_array() haste wirklich beides. Eigentlich ist beides nicht nötig. Zumindest habe ich es noch nie gebraucht dass beides zurück gegeben wird. Daher würde ich auch eher mysql_fetch_assoc() verwenden! Da bekommst du nur einmal die Daten, kein unnötiges verdoppeln der Daten.

Im übrigen sind sogesehen assoziative Arrays durchaus praktischer! Beim Abfragen einer DB sollte das auf jeden Fall genutzt werden. Aber Arrays braucht man ja noch für so einige andere Dinge und dann ist es oft egal was für einen Key du hast. Und da kann man einfach eine Zahl als Key nutzen.

Wenn du in anderen Programmiersprachen schaust, zum Beispiel Java da gibt es Arrays die NUR einen integer Key akzeptieren. Allerdings ist da ein Arrays auch etwas anders als in PHP aufgebaut. Es gibt aber trotzdem Datenstrukturen die ähnlich wie in PHP arbeiten. Allerdings finde ich es in Java recht eckelig mit solchen Strukturen zu arbeiten, da ist PHP schon seeeer angenehm!
__________________
Wenn ich du wäre, wäre ich lieber ich.

http://www.clubstars.net
http://www.x-tinct.de
Flor1an ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 09.07.2008, 09:37   Nach oben    #20