array_merge Problem

Hallasas

Erfahrenes Mitglied
Hallo Community!
Ich habe leider ein Problem mit array_merge:
Ich möchte ein kleines Board erstellen und auch die Möglichkeit bieten, die Boardsprache zu verändern.
Ich habe viele Dateien( lang_email.php, lang_board.php etc. ) indenen immer ein Array mit dem Namen "lang" vorhanden ist.
Nun meine Frage:
Wie kann ich diese zusammenfügen, ohne das sich die Arrays gegenseitig "überschreiben" ?
Denn wenn ich immer nur den Arraynamen "lang" benutze, ist nur noch der Inhalt des letzten Arrays vorhanden...
Ich habe eine andere Möglichkeit gefunden, jedoch ist sie mir sehr unangenehm:
PHP:
<?php
$lang[1] = array ( "1" => "Hallo, " );
$lang[2] = array ( "2" => "wie geht es dir ?" );
foreach( $lang as $l )
{
    echo $l[1];
    echo $l[2];
}
?>

Wie gesagt, diese Methode ist mir sehr unangenehm, da ich nur in der "foreach Schleife" Ausgaben am Browser durchführen kann...

Ich hoffe, ihr könnt mir helfen...

Gruß Hallasas
 
In dem du in jeder Sprachdatei anführst:

PHP:
if(empty($lang) || !is_array($lang)) {
 $lang = array();
}

$lang = array_merge($lang, array(
  'new' => 'new entry'
));
 
Zuletzt bearbeitet:
Hier mal ein paar Tipps von mir ;)
PHP:
<?php
$langs = array();
$lang = array();
$langs[] = array ( "1" => "Hallo, " );
$langs[] = array ( "2" => "wie geht es dir ?" );
foreach( $langs as $l )
{
    $lang = $l;
}
echo "<pre>";
var_dump($lang);
echo "</pre>";
?>
Aber eigentlich sollte auch das gehen:
PHP:
require_once("lang_main.php");
require_once("lang_board.php");

echo "<pre>";
var_dump($lang);
echo "</pre>";
?>
Hab das beides nicht getestet, in meiner Template-Engine mach ich das anders...
 
Sorry, hatte einen kleinen Fehler in meinem Skript, so ist es natürlich richtig:

PHP:
if(empty($lang) || !is_array($lang)) {
 $lang = array();
}

$lang = array_merge($lang, array(
  'new' => 'new entry'
));
 
Dankeschön, jedoch funktioniert es immer noch nicht :(
PHP:
$lang = array( '1' => 'Eins');

if(empty($lang) || !is_array($lang)) { 
 $lang = array(); 
} 

$lang = array_merge($lang, array( 
  '2' => 'Zwei' 
));  

echo $lang[1];
echo $lang[2];

Ausgabe:
Code:
Zwei
 
Ein normaler Array fängt bei 0 an zu zählen, deshalb startet auch [phpf]array_merge[/phpf] bei 0.

PHP:
<?php

$lang = array( '1' => 'Eins');

if(empty($lang) || !is_array($lang)) { 
 $lang = array(); 
} 

$lang = array_merge($lang, array( 
  '2' => 'Zwei' 
));  

echo $lang[0];
echo $lang[1];

Funktioniert richtig.
Er ersetzt allerdings nur numerische Keys.
 
Zeig mal die lang-Dateien (beispielhaft 2 Dateien) und wie du die Dateien lädst, dann können wir dir besser helfen!

Hier mal mein Aufbau:

index.php
PHP:
$langs = array();
$langs[] = "de".DIRECTORY_SEPARATOR."lang_main.php";
$langs[] = "de".DIRECTORY_SEPARATOR."lang_navi.php";
$langs[] = "de".DIRECTORY_SEPARATOR."lang_news.php";
$tpl->loadLanguages($langs);

Ausschnitt aus Template-Klasse
PHP:
public function loadLanguages($files)
	{
		// Versuchen, alle Sprachdateien einzubinden
		foreach($files as $langFile)
		{
			$lang = array();
			// wenn die Datei $this->languageDir.$this->languageFiles[$i] nicht existiert
			if (!file_exists($this->languageDir.$langFile))
			{
				return false;
			}
			// Einbinden...
			require_once($this->languageDir.$langFile);
			
			// !! jetzt steht das Array $lang zur Verfügung - pro Datei werden die Felder zum Array $this->language hinzugefügt
			$this->language += $lang;
		}
		return true;
	}
Gruß Radhad
 
Zuletzt bearbeitet:
Also hier ist die erste Datei ( lang_board.php ):
PHP:
<?php
$lang = array (
    "new_threat" => "Neues Thema",
    "new_post" => "Neuer Eintrag"
// etc...
 );
?>
Die zweite Datei ( lang_date.php ):
PHP:
<?php
$lang = array (
    "d1" => "Montag",
    "d2" => "Dienstag",
    "d3" => "Mittwoch"
// etc...
);
?>

Und nun möchte ich diese in einem Array haben, um diese dann im Browser auszugeben:
PHP:
echo $lang["d1"];
echo $lang["new_post"];
// etc...

Es sind natürlich mehr als zwei Dateien vorhanden...
 
Zurück