list() Struktur auslagern [message #176699] |
Wed, 18 January 2012 16:34 |
Maximilian Koch
Messages: 1 Registered: January 2012
Karma: 0
|
Junior Member |
|
|
Hallo NG
ich möchte aus einer CSV datei die inhalte auslesen, diese können sich
jedoch mal ändern in der reihenfolge. und es wird danach umständlich an
mehreren orten im PHP Script die sache zu ändern..
gäbe es nicht eine möglichkeit diese auszulegen..
in etwa so:
------------------------------
$datenstruktur = "$land, $artnrCH, $artnrAT, $artnrDE, $rezepturnummer,
$artikel, $reichweiteintagen, $reichweitebismbintagen, $istbestand,
$planPPS, $reservation, $planrwbismbintagen, $mindestbestand, $netogewicht,
$me, $kostenstelle, $MHD, $vepal, $gebch, $chrez, $schnitt3M, $schnitt6M,
$schnitt12M, $schnitttotal";
foreach ($datenbank as $datenbank_temp)
{
list($dispoliste_datenstruktur) = explode(";",
$datenbank_temp);
}
----------------------------------------------
allerdings funktioniert das so nicht. kann mir jemand weiterhelfen?
Danke
|
|
|
Re: list() Struktur auslagern [message #176700 is a reply to message #176699] |
Wed, 18 January 2012 19:44 |
Erwin Moller
Messages: 228 Registered: September 2010
Karma: 0
|
Senior Member |
|
|
On 1/18/2012 5:34 PM, Maximilian Koch wrote:
> Hallo NG
>
> ich möchte aus einer CSV datei die inhalte auslesen, diese können sich
> jedoch mal ändern in der reihenfolge. und es wird danach umständlich an
> mehreren orten im PHP Script die sache zu ändern..
>
> gäbe es nicht eine möglichkeit diese auszulegen..
>
> in etwa so:
> ------------------------------
>
> $datenstruktur = "$land, $artnrCH, $artnrAT, $artnrDE, $rezepturnummer,
> $artikel, $reichweiteintagen, $reichweitebismbintagen, $istbestand,
> $planPPS, $reservation, $planrwbismbintagen, $mindestbestand, $netogewicht,
> $me, $kostenstelle, $MHD, $vepal, $gebch, $chrez, $schnitt3M, $schnitt6M,
> $schnitt12M, $schnitttotal";
>
> foreach ($datenbank as $datenbank_temp)
> {
> list($dispoliste_datenstruktur) = explode(";",
> $datenbank_temp);
> }
> ----------------------------------------------
>
> allerdings funktioniert das so nicht. kann mir jemand weiterhelfen?
>
> Danke
>
>
[In English: I can read German a little, but not produce it.]
You command:
explode(";",$datenbank_temp);
will explode on ;
For example:
$myPartsArray = explode(",","eins,zwei,drei");
Now you have 3 elements in your array:
$myPartsArray[0] <-- "eins"
$myPartsArray[1] <-- "zwei"
$myPartsArray[2] <-- "drei"
Looking at your example you want to explode on "," and not on ";".
Also: You use list(), which makes no sense like that.
Explode() already returns an array, so you can just do:
$dispoliste_datenstruktur = explode(",",$datenbank_temp);
That way you'll have all in the array $dispoliste_datenstruktur.
You can always check what is inside some array quickly using the handy
function print_r(), like this:
echo "<pre>";
print_r($dispoliste_datenstruktur);
echo "</pre>";
In case I didn't answer your question at all, which is very possible,
just ask again. :-)
Regards,
Erwin Moller
--
"That which can be asserted without evidence, can be dismissed without
evidence."
-- Christopher Hitchens
|
|
|
Re: list() Struktur auslagern [message #176755 is a reply to message #176699] |
Sun, 22 January 2012 06:00 |
Thomas 'PointedEars'
Messages: 701 Registered: October 2010
Karma: 0
|
Senior Member |
|
|
Maximilian Koch wrote:
> ich m�chte aus einer CSV datei die inhalte auslesen, diese k�nnen sich
> jedoch mal �ndern in der reihenfolge. und es wird danach umst�ndlich an
> mehreren orten im PHP Script die sache zu �ndern..
fgetcsv() und auch Dein Ansatz liefern Dir ein Array. Du kannst *einmalig*
den Wert eines Array-Elements einer Variablen zuweisen, und dann im Script
die Variable verwenden. Alternativ kannst Du *einmalig* Konstanten oder
Eigenschaften definieren, welche als Wert den jeweiligen Array-Index haben
(ich empfehle hier einen objektorientierten Ansatz mit Klassenkonstanten,
oder Eigenschaften, wenn es flexibler sein muss), und dann verwendest Du die
Konstante oder Eigenschaftsreferenz als Array-Index. Zum Beispiel so
(ungetestet, aber in dieser Form bewährt):
class Import
{
protected $_fields = array(
0 => 'country',
1 => 'sku_ch'
);
public function import($file)
{
$mapper = ArticleMapper::getInstance();
$mapper->startTransaction();
while (($data = fgetcsv($file)) !== false)
{
for ($i = count($data); $i--;)
{
$data[$this->_fields[i]] = $data[i];
}
$article = new Article($data);
try
{
$mapper->save($article);
}
catch (Exception $e)
{
$mapper->rollBack();
break;
}
}
if ($data === false && !$mapper->commit())
{
$mapper->rollBack();
}
}
}
> g�be es nicht eine m�glichkeit diese auszulegen..
"auszulegen"? Bitte erst lesen, dann denken, dann posten.
BTW: de.comp.lang.php existiert.
BTW2: Deine Umlaute sind kapott, lies bitte vor weiteren Postings
<http://oe-faq.de/>.
PointedEars
--
Anyone who slaps a 'this page is best viewed with Browser X' label on
a Web page appears to be yearning for the bad old days, before the Web,
when you had very little chance of reading a document written on another
computer, another word processor, or another network. -- Tim Berners-Lee
|
|
|
Re: list() Struktur auslagern [message #176756 is a reply to message #176700] |
Sun, 22 January 2012 06:19 |
Thomas 'PointedEars'
Messages: 701 Registered: October 2010
Karma: 0
|
Senior Member |
|
|
Erwin Moller wrote:
> On 1/18/2012 5:34 PM, Maximilian Koch wrote:
>> ich möchte aus einer CSV datei die inhalte auslesen, diese können sich
^^^^^^^^^^^
>> jedoch mal ändern in der reihenfolge. und es wird danach umständlich an
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>> mehreren orten im PHP Script die sache zu ändern..
>>
>> gäbe es nicht eine möglichkeit diese auszulegen..
>> […]
> [In English: I can read German a little, but not produce it.]
>
> You command:
> explode(";",$datenbank_temp);
> will explode on ;
>
> For example:
> $myPartsArray = explode(",","eins,zwei,drei");
>
> Now you have 3 elements in your array:
> $myPartsArray[0] <-- "eins"
> $myPartsArray[1] <-- "zwei"
> $myPartsArray[2] <-- "drei"
>
>
> Looking at your example you want to explode on "," and not on ";".
>
> Also: You use list(), which makes no sense like that.
> Explode() already returns an array, so you can just do:
>
> $dispoliste_datenstruktur = explode(",",$datenbank_temp);
>
> That way you'll have all in the array $dispoliste_datenstruktur.
That is correct, but beside the point, as the question was how to get rid of
the numeric indexes that are hard to maintain. The list() approach is
viable if list() is given more than one argument, one for each component of
the comma-separated value:
| > list($foo, $bar) = explode(',', 'baz,bla');
| > echo implode('#', array($foo, $bar));
| baz#bla
IOW, now $foo and $bar can be used in place of $dispoliste_datenstruktur[0]
and $dispoliste_datenstruktur[1], respectively. The drawback of this
approach is that all fields need to be present or a notice will be
generated:
$ php -a
Interactive mode enabled
<?php
list($foo, $bar) = explode(',', 'baz');
echo implode('#', array($foo, $bar));
PHP Notice: Undefined offset: 1 in - on line 3
PHP Stack trace:
PHP 1. {main}() -:0
baz#
Fortunately, list() appears to be ignoring too many elements RHS.
$ php -a
Interactive mode enabled
<?php
list($foo, $bar) = explode(',', 'foo,bar,baz');
echo implode('#', array($foo, $bar));
foo#bar
> In case I didn't answer your question at all, which is very possible,
> just ask again. :-)
You did not answer the question at all. I have marked the relevant part
that you overlooked.
PointedEars
--
Danny Goodman's books are out of date and teach practices that are
positively harmful for cross-browser scripting.
-- Richard Cornford, cljs, <cife6q$253$1$8300dec7(at)news(dot)demon(dot)co(dot)uk> (2004)
|
|
|