1

foreach ループ内で作業しており、array_rand を if ステートメント内に配置しようとしています。if ステートメント内では機能しませんが、if ステートメントから取り出すと (そのまま) 機能します。ところで、これは foreach ループの内外で当てはまります。ループの前後どちらに配置しても、if ステートメント内では機能しません。しかし、if ステートメントから外せば、ループの前後で機能します。

foreach($files as $file) {
$randcolor = array("red","green","blue","yellow","brown","black","orange","white","silver","purple","pink");
    if(isset($color)) {
        $color = $color;
    }
    else {
        $color = $randcolor[array_rand($randcolor)];
    }

    ... bunch of other stuff

}

それぞれの色を独自の if($color === 'red'){etc.} ステートメントで綴ってみました。試してみました if(!$color){$color = $randcolor[array_rand($randcolor)];} 何も機能しません。if ステートメント内では機能しません。取り出せば動作しますが、$color 属性で特定の色を定義できなくなります。不思議なことに、無条件の array_rand ステートメントの後に特定の色を定義しても、他の色指定を引き継いで上書きします。

編集「機能しない」ということは、つまり、文字列をまったく出力しないことを忘れないでください。ただ空白。

アップデート

わかりやすくするために: $color はショートコードの属性であるため、ショートコード自体によって定義されます。

更新 2

div クラスに $color を含む、 return $thefileswhere = a long html 文字列を使用して、長いショートコードの最後にこれを出力します。$thefiles

** UPDATE 3 ** コードの詳細:

foreach($files as $file) {
        $randcolor = array("red","green","blue","yellow","brown","black","orange","white","silver","purple","pink");
        if(!($color)){$color = $randcolor[array_rand($randcolor)];}


        $thefiles .= '<a id="sssf" style="width:'.$width.$perpx.'" class="'.$style.$corners.'" href="'.$link.'" download><div class="sssf-filetype sssf-'.$color.'"><div class="sssf-label">'.$ftype.'</div></div>'.$cleanName.' <span style="float:right;">'.$fsize.'</span></a>';

    unset($color);
        }

    }

return $thefiles;

}

4

2 に答える 2