Nasıl bir dize unserialize olabilir?

4 Cevap php

Ben kolay bir kullanıcı değiştirmek için yapmak için bir sürükle ve bırak ağaç yapısını kullanan bir menü sistemine sahip. Javascript dize serializes zaman, şu şekilde yapar:

// Assume each of these items has an ID on with the respective numbers attached
Menu Item 1
  + Menu Item 2
  + Menu Item 3
     + Menu Item 4
Menu Item 5
Menu Item 6
  + Menu Item 7

: Bu daha sonra olarak seri alacak

1>2>3>>4#5#6>7

Bu sorun zor unserialize yapar sublevels bir rasgele sayı, orada olabilir olmasıdır. Bunu nesneleştirmek PHP sunucu tarafı kullanıyorum ama ne gibi bir kayıp am.

Herhangi bir öneri bekliyoruz, hatta serileştirme yöntemi, ben sadece kod kesmek gerekir.

4 Cevap

Siz PHP json_encode / json_decode fonksiyonları içine bakmalı, bu gerçekten kolay Javascript ile etkileşim yapmak.

Geçerli seri hale getirme biçimi ile sadece kendiniz için baş ağrısı yaratıyor.

Eğer gerçekten bu biçimi kullanmak istiyorsa, böyle bir şey işe, ama ben JSON çok daha iyi olacağını düşünüyorum.

<?php

$str = '1>2>3>>4#5#6>7';

preg_match_all('~([^\d]+)?([\d]+)~', $str, $matches, PREG_SET_ORDER);

//$current is the nodes from the top to the node we are at currently
$current = array();
$result = array();

foreach ($matches as $item) {
    $id = $item[2];

    if (!$item[1] || $item[1] == '#') {
        $level = 0;   
    } else {
        $level = strlen($item[1]);    
    }

    $tmp = array( 'id' => $id );

    $current[ $level ] = & $tmp;

    if ($level == 0) {
        $result[] = & $tmp;   
    } elseif (isset($current[ $level - 1 ])) {
        $parent = & $current[ $level - 1 ];
        if (!isset($parent['children'])) {
            $parent['children'] = array();   
        }
        $parent['children'][] = & $tmp;
        unset($parent);
    } 

    unset($tmp);
}

print_r($result);

Böyle JSON forma (yerine dize 1>2>3>>4#5#6>7 in) seri hale getirmek için ne:

{'1': {'2': {'3': {'4': true}}}, '5': true, '6': {'7': true}}

Sonra PHP json_decode kullanarak unserialize yapabilirsiniz.

EDIT: istendi aylar sonra bu aşağı oylama insanlar için, bu sorunun orijinal formatı json veya javascript söz etmedi. OP benim yanıt sonra, ben bu soru değil olsa bile bu soru için PHP cevap arıyorsanız bu sayfaya alıyorum insanlar için benim cevap sol kendini düzeltti açıklamalarda yanıtladı Dolayısıyla ben (PHP yanıtladı şimdi) doğrudan yanıtlayan.

hmm ...

bu yüzden:

$var_name = serialize( array("Menu Item 1, Menu Item 2, Menu Item 3, etc...") );

// do whatever

$var_name2 = unserialize($var_name);

Bu kullanmak için iyi bir yöntem olabilir mi?