"Dynamisch" Arrays erzeugen.

schuetz10

Grünschnabel
Guten Abend!

Folgendes: Ich hab in einer Textdatei einen String. Dieser ist hin und wieder mit "|" unterteilt. Das ist jeweils mein Trennzeichen, ich mach mir also ein neues Array:

PHP:
$arr_DataContent = split('\|',$dataContent);

Jetzt will ich die einzelnen Elemente dieses Arrays nochmals an jedem Leerzeichen in ein eigenes Array unterteilen. Das ganze mache ich mit einer "for- Schleife".
Also so in der Art:

PHP:
	for($i=0;$i<count($arr_DataContent);$i++){
		$arr_Data.$i = split(' ',$arr_DataContent[$i]);
		$table .= '<tr>';
		for($j=0;$j<count($arr_Data.$i);$j++){
			$table .= '<td>'.$arr_Data.$i[$j].'</td>';
		}
		$table .= '</tr>';
	}

Allerdings funktioniert dass nicht (was wahrscheinlich auch logisch sein dürfte :-) ), ich weiß nur nicht, wie ich es sonst machen soll, Probleme bereitet mir ja folgende Zeile:

PHP:
$table .= '<td>'.$arr_Data.$i[$j].'</td>';

Weil wie soll ich sonst eben, wenn man jetzt als Beispiel den ersten Durchgang der äußeren Schleife nimmt dass "innere" Array an einer bestimmten Stelle ansprechen, als mit $arr_Data.$i[$j] (Im ersten Durchgang wäre dass dann ja $arr_Data0[$j] oder?).
Mir ist auch klar, dass sich das $j dann aber auf das $i und nicht auf dass Array selbst bezieht.

Wie macht man dass also?
"eval" hat afaik ja keinen Rückgabewert oder?

btw., mein (bis jetzt) ganzes Script sieht so aus:
PHP:
<?php
	$dataContent = file_get_contents('data/file_data.txt');
	$arr_DataContent = split('\|',$dataContent);
	$table = '	<table width="25%" border="1">
					<tr class="bold">
						<td>Nummer</td>
						<td>Name</td>
						<td>Vor</td>
						<td>Li</td>
						<td>Re</td>
					</tr>';
	for($i=0;$i<count($arr_DataContent);$i++){
		$arr_Data.$i = split(' ',$arr_DataContent[$i]);
		$table .= '<tr>';
		for($j=0;$j<count($arr_Data.$i);$j++){
			$table .= '<td>'.$arr_Data.$i[$j].'</td>';
		}
		$table .= '</tr>';
	}
	$table .= '</table>';
?>

Weiter unten wird dann halt noch $table mit "echo" ausgegeben :)

Aja, und $dataContent enthält, nachdem es zugewiesen wurde folgendes:
Code:
1 Karli 0 2 3|2 Fritz 1 4 0|3 Otto 1 5 6|4 Berta 2 8 7|5 Mona 3 0 0|6 Paul 3 0 0|7 Eva 4 0 0|8 Adam 4 0 0
(falls dass das Ganze irgendwie beeinflussen könnte)

Ausgegeben bekomme ich dann noch folgendes:
Code:
<table width="25%" border="1">
<tr class="bold">
<td>Nummer</td>
<td>Name</td>
<td>Vor</td>
<td>Li</td>
<td>Re</td>
</tr>
<tr>
<td>1</td>
</tr>
</table>

Edit: Mir ist ziemlich klar, dass folgendes nicht funktioniert: $arr_Data.$i[$j], die Frage ist nur, wie macht man es dann?

mfg
schuetz10
 
Zuletzt bearbeitet:
PHP:
$current_arr = 'arr_data'.$i;

echo ${$current_arr}[$j];
Ist ungetestet und ich bin müde...

PHP:
<?php
$number = '1';

$arr1 = array();
$arr1[] = 'hans';
$arr1[] = 'blub';

$cont = 'arr'.$number;

print_r(${$cont});

?>
Sowas klappt zumindest...

Gute Nacht ;)
 
PHP:
<?php
    $dataContent = file_get_contents('data/file_data.txt');
    $arr_DataContent = split('\|',$dataContent);
    $table = '    <table width="25%" border="1">
                    <tr class="bold">
                        <td>Nummer</td>
                        <td>Name</td>
                        <td>Vor</td>
                        <td>Li</td>
                        <td>Re</td>
                    </tr>';
    for($i=0;$i<count($arr_DataContent);$i++){
        $arr_DataContent[$i][] = split(' ',$arr_DataContent[$i]);
        $table .= '<tr>';
        for($j=0;$j<count($arr_DataContent[$i]);$j++){
            $table .= '<td>'.$arr_DataContent[$i][$j].'</td>';
        }
        $table .= '</tr>';
    }
    $table .= '</table>';
?>

Das sollte so funktionieren denk ich. Elemente eines Arrays spricht man nicht mit $array.$schlüssel an sondern mit $array[$schlüssel].
 
Das Problem war/ist, dass es sich bei ihm nicht um mehrdimensionale Arrays handelt sondern um durchnummierte Arrays...

Sprich: arr1, arr2, arr3, etc.

Über den Sinn oder Unsinn eines solchen Verfahrens (im Vergleichn zu mehrdimensionalen Arrays) wollte ich hier nicht diskutieren, sondern ihm eine für ihn passende Lösung anbieten. ;)
 
Erstmal ja thx für eure Antworten :)

Ich habs dann aber so gelöst, weil ich bemerkt habe, dass ich die Arrays nachher doch nicht mehr benötige:

PHP:
		$table = '    <table width="120" class="table">
    	                <tr class="bold">
    	                    <td width="20">Nr</td>
        	                <td width="70">Name</td>
            	            <td width="10">Vor</td>
                	        <td width="10">Li</td>
                    	    <td width="10">Re</td>
 	                   </tr>'; 
   	 	foreach($arr_OuterArray as $part){
   	 		$table .= "<tr>\n";
    		$arr_InnerArray = explode(" ", $part);
    		foreach($arr_InnerArray as $element)
        		$table .= "<td>".$element."</td>\n";
			$table .= "</tr>\n";
		}

btw.

@FipsTheThief: Mir war durchaus klar, wie man Arrays anspricht, nur wie ich dass dann bei "dynamisch" erzeugten machen soll, war mir ein Rätsel ;)
trotzdem thx ;)


mfg
 
Achso dann bin ich ja auf den völlig falschen Zug aufgesprungen ;) Aber selber immer neue Arrays zu erschaffen die durchnummeriert sind , das muss dann schon nen Machochist sein ;)
 
Zurück