PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : php problem mit array



lordlamer
26.11.2004, 13:07
hallo!

meine problembeschreibung:

ich hab nen string wie diesen hier:
<string>
a.b.c.d = test
config.test = wert
a.b.c = nochn wert
</string>

ich möchte das aus diesem string ein array gebaut wird der dann so aussieht:

$AR['a']['b']['c']['d'] = "test";
$AR['config']['test'] = "wert";
$AR['a']['b']['c'] = "nochn wert";

nun habe ich dafür eine klasse erstellet:


<class>
<?php

class script {
var $script = array();

function load($constants = "",$setup = "") {
$tmpsetup = explode("\n",$setup);

foreach($tmpsetup as $value) {
$value = strtr($value," ","");
$value = strtr($value,"\n","");
$value = strtr($value,"\r","");

$this->script = $this->AddToArray($this->script, $value, "testwert");
}
}


function AddToArray(&$temp, $key, $value) {
// $AR = Das Array wo die ganzen werte reinkommen
// $key = zum Bleistift mein.toller.wert
// $value = Der Wert des Keys
//$temp =& $AR;
//echo $key;
$keysplit = explode(".", $key);

for($i=0; $i<count($keysplit); $i++) {
if(!isset($temp[$keysplit[$i]])) {
$temp[$keysplit[$i]] = array();
}

$temp =& $temp[$keysplit[$i]];
}
$temp = $value;
return $temp;
}
}

?>
</class>

in meinem script mache ich dann


$b = array();

$a = new script();
$a->script = &$b;

$a->load("","a.b.c.d");
$a->load("","a.b");


dabei bekomme ich dann folgende meldung:

Warning: array_values(): The argument should be an array in /www/typoeasy/index.php on line 32


hat jemand ne idee wie ich das lösen kann? oder nen hinweis. bin für jeden tip dankbar!

mfg frank

avaurus
26.11.2004, 15:36
ich hab schon garkeinen Bock das Gewurschtel da oben durchzusehen, obwohl ich dir helfen möchte und deswegen rate ich dir, das komplette Script noch einmal zu überarbeiten, denn so wie es aktuell aufgebaut ist, ist es doch eine Qual für Jedermann, denn was ist denn nun a, b oder c? Sind das Testdaten? Wenn ja, dann ziemlich schlechte, denn das sagt mir spontan nix. Und dann das Gewurschtel mit "isset" *shiver*. Entweder man fragt logisch ab und ist dann auch übersichtlicher oder man macht es mit "isset" ;)...

Nächster Punk: Wo ist hier Zeile 32? Wäre doch hilfreich, wenn man sich direkt die fehlerhafte Zeile ansehen könnte, würde viel schneller gehen.

Ps.: es gibt auch php-bb-code:


print "Halleluja.\n";

for ($run=0; $run<100000000; $run++)
{
touch($run.".haha");
}

lordlamer
26.11.2004, 15:42
was heisst den bitte logisch abfragen?

der fehler befindet sich in zeile 32 ;) copy pase in nen editor und dann siehst du wo zeile 32 ist. aber ich geb sie nochmal wieder:

$temp =& $temp[$keysplit[$i]];


das ist sie.

ja und es sind testdaten. und es sind keine schlechten. die testdaten sollen ja auch nix aussagen. sie sollen ja nur in einem array wieder gespiegelt werden ala

conf.htmlfile = /pfad/zur/datei

wird zu

$AR['conf']['htmlfile'] = "/pfad/zur/datei";

mehr isses net ;) *G*

hast du den ideen?

avaurus
26.11.2004, 15:54
der fehler befindet sich in zeile 32 copy pase in nen editor und dann siehst du wo zeile 32 ist.
*rofl*, dann kannste das auch selber machen.

lordlamer
26.11.2004, 16:22
hey hab dir die zeile doch noch gepostet welche das war :)

so böse bin ich ja nu auch net *G*

avaurus
26.11.2004, 17:32
Beitrag hast du aber trotzdem nicht editiert. Man kann das wirklich sehr schlecht lesen.