0

私はこれについてインターネットを調べましたが、配列を foreach に渡して内部で変更しようとしたときにのみ問題が発生します。私の問題ははるかに簡単で紛らわしいです。2 つのグローバル変数があります。

$type="";
$rule="";

そして、私はこのコードを持っています:

foreach($cartasxml->children() as $child) {
    $str="insert into cards (title,cost,color,loyalty,type,pow,tgh,hand,life,rules,set,rarity,number,artist,flavor,cost) values('{{{".$child->name."}}}',";
if(isset($child->typelist))
    {
        foreach($child->typelist as $a)
            $type .= "|" . str_replace("{","[",str_replace("}","]",$a->type));
        $str.="'{{{".substr($type,1)."}}}',";
    }
    else
        $str.="NULL,";

そして、foreach の最後に次のことを行います。

$type="";
$rule="";

したがって、 $str を印刷して $type の値を確認すると、最後に含まれていたものだけが表示されます。おそらくescopeの問題ですが、解決方法はまだわかりません。

誰か?

4

2 に答える 2

0

配列を使用してすべての値をプッシュできるかもしれません

$type_array = array();
$str_array = array();
foreach($cartasxml->children() as $child) {
    $str="insert into cards (title,cost,color,loyalty,type,pow,tgh,hand,life,rules,set,rarity,number,artist,flavor,cost) values('{{{".$child->name."}}}',";
if(isset($child->typelist))
    {
        foreach($child->typelist as $a)
            $type .= "|" . str_replace("{","[",str_replace("}","]",$a->type));
        $str.="'{{{".substr($type,1)."}}}',";

array_push($type_array,$type);
array_push($str_array,$str);

    }
    else
        $str.="NULL,";


print_r($type_array);
print_r($str_array);
于 2012-09-06T06:51:47.883 に答える
0

これを試して:

$type = implode('|', 
                array_map(function($a)
                           { return str_replace("{","[",str_replace("}","]",$a->type)) },
                          $child->typelist));
$str .= "'{{{".$type."}}}',";
于 2012-09-06T07:29:44.357 に答える