PHP és JavaScript tömb konverter

March 24th, 2010 19:33 - hozzászólások: 0, nézettség: 615

Összedobtam hamar egy tömb átalakítót PHP nyelven, amivel PHP-ből és JavaScript-ből egyaránt oda-vissza tudjuk tömbünket konvertálni.

Ez azért jó, hogy a két nyelv tömbjeit tudjuk kezelni a másik nyelvben. Ha például PHP-ben dolgozunk és szeretnénk átadni a JavaScript-nek az adott tömb tartalmát, akkor ezekkel a függvényekkel lehetőségünk nyílik rá. Ugyan akkor ez fordítva is lehetséges.

Most pedig lássuk a kódot:

<?php
// JS array => PHP array
function jsarray($javascript, $varname) {
    $parts = explode(';', $javascript);
    $javascript = null;
    foreach ($parts as $part) {
        if (!stristr($part, 'new Array()'))
            $javascript .= $part.';';
        else
            $javascript .= str_ireplace('new Array()', 'Array()', $part.';');
    }
    $javascript .= 'return '.$varname.';';
    $js = str_replace(array(";\n;", "; ;", $varname), array(";\n", ';', '$'.$varname), $javascript);
    return eval($js);
}

// PHP array => JS array
function arrayjs($array, $varname, $flag = false) {
    $jsarr[$varname] .= "\n".$varname." = new Array();\n";
    foreach ($array as $key => $value) {
        if (!is_int($key)) $key = '"'.addslashes($key).'"';
        if (is_array($value))
            $jsarr = @array_merge($jsarr, arrayjs($value, $varname.'['.$key.']', true));
        else {
            $jsarr[$varname] .= $varname.'['.$key.']'.' = ';
            if (is_int($value) or is_float($value))
                $jsarr[$varname] .= $value;
            elseif (is_bool($value))
                $jsarr[$varname] .= $value ? 'true' : 'false';
            elseif (is_string($value))
                $jsarr[$varname] .= '"'.addslashes($value).'"';
            elseif (is_null($value))
                $jsarr[$varname] .= 'null';
            else
                return false;
            $jsarr[$varname] .= ";\n";
        }
    }
    if (!$flag) {
        foreach ($jsarr as $val) { $out .= $val; }
        return $out;
    }
    return $jsarr;
}
?>

A példa:

<?php
$simple = array("text", 1, false, true, 10.3);
$multi = array(
    "simple" => $simple,
    "multi" => array(
        "sha1" => sha1('data'),
        "md5" => md5('data'),
    ),
    0, 1, 20, 3,
    'user' => array(
        'valaki@example.com' => array(
            'name' => 'valaki',
            'password' => sha1('string'),
            'online' => true,
        ),
        'valaki@gmail.com' => array(
            'name' => null,
            'password' => sha1('passw'),
            'online' => false,
        ),
        'valaki@domain.com' => array(
            'name' => "",
            'password' => sha1('PsWd'),
            'online' => false,
        ),
    ),
);

$js = arrayjs($multi, 'js_array');
echo $js;
var_export(jsarray($js, 'js_array'));
?>

Ezzel be is fejezném e rövid bejegyzést, használjátok kedvetekre.

Eddig még egy hozzászólás sem érkezett

Hozzászólás írása

Az e-mail címed nem kerül nyilvánosságra. A *-gal jelölt mezők kitöltése kötelező