2011-04-21 48 views
-1

我在我的MySQL數據庫的序列化值,看起來像這樣:在序列化數組中使用in_array?

a:5:{s:4:"name";s:13:"Keith Donegan";s:3:"age";s:2:"21";s:7:"college";s:9:"Spin City";s:8:"category";s:1:"7";s:8:"checkbox";a:2:{i:0;s:1:"3";i:1;s:1:"9";}} 

我可以輸出的複選框陣列很好,但我需要運行它againest另一組使用in_array IDS的,但我的代碼不工作,驚喜! :)

echo $eirepanel_general_options['checkbox']; // used in a foreach loop 

查看值3 & 9,我需要測試這些。


編輯:主代碼

<?php 

$eirepanel_general_options_saved = $_REQUEST['eirepanel_general_options_saved']; 
if(isset($eirepanel_general_options_saved)) 
{ 
    $eirepanel_general_options_name = $_REQUEST['eirepanel_general_options_name']; 
    $eirepanel_general_options_age = $_REQUEST['eirepanel_general_options_age']; 
    $eirepanel_general_options_college = $_REQUEST['eirepanel_general_options_college']; 
    $eirepanel_general_options_category = $_REQUEST['eirepanel_general_options_category']; 
    $eirepanel_general_options_checkbox = $_REQUEST['eirepanel_general_options_checkbox']; 

    $eirepanel_general_options = array 
    (
    'name' => $eirepanel_general_options_name, 
    'age' => $eirepanel_general_options_age, 
    'college' => $eirepanel_general_options_college, 
    'category' => $eirepanel_general_options_category, 
    'checkbox' => $eirepanel_general_options_checkbox 
    ); 

    update_option('eirepanel_general_options', $eirepanel_general_options); 
} 
else 
{ 
$eirepanel_general_options = get_option('eirepanel_general_options'); 
} 


$categories = get_categories(); 
foreach($categories as $category) 
{ 
    $eirepanel_general_options_string = $eirepanel_general_options['checkbox']; 
    $eirepanel_general_options_array = explode(',', $eirepanel_general_options_string); 
    echo$cat_ids = explode(',',$category->cat_ID); 

    $ids = array(8, 4); 

    var_dump($eirepanel_general_options_string); 

    ?> 


    <?php // <input name="eirepanel_general_options_checkbox[]" type="checkbox" value="<?php echo $category->cat_ID; ?> 
     <?php // if($eirepanel_general_options_string == $category->cat_ID){ echo "checked='checked'"; } <br /> ?> 

     <span><?php echo $category->cat_name; ?></span> 
     <input name="eirepanel_general_options_checkbox[]" value="<?php echo $category->cat_ID; ?>" type="checkbox" <?php in_array($eirepanel_general_options_string, $ids) ? 'checked="checked"' : '' ?> /> <br /> 

<?php } 

// var_dump($eirepanel_general_options_string); 


?>   
+4

爲什麼不首先使用in_array反序列化數組?我沒有看到問題。 – 2011-04-21 12:15:34

+0

爲什麼你只聲明變量將它們傳遞給數組? – 2011-04-21 12:39:16

+0

我仍然在努力理解你的預期結果是什麼,以及你的實際結果是什麼。哪一點壞了? – 2011-04-21 12:40:15

回答

3

unserialize這裏是你的朋友!

通過該函數運行包含該數組的字符串,捕獲結果並處理該結果。

$serial = **serial array goes here**; 
$array = unserialize($serial); 

然後

echo $array['checkbox']; 

會起到你所期望的。如果需要,可使用serialize來反轉效果。

$serial = serialize($array); 
+0

對不起,我應該提到,我正在使用Wordpress,並且這已經假設我已經假設 – 2011-04-21 12:19:18

+0

@KeithDonegan如果你在使用'in_array()'之前調用了'var_dump()',那麼值是什麼樣子?這樣你就可以確定Wordpress是否確實在做你期望的。 – Treffynnon 2011-04-21 12:20:41

+0

已經做了什麼?它會在將數組存儲在數據庫中時序列化一個數組(我認爲這可能是mySQL在這裏做腿部工作,但我可能是錯的)。 – 2011-04-21 12:20:44

0

串行化數組不再是數組,而是數組值的字符串導出。 要使用數組函數,您需要使用unserialize()將其返回給數組,否則它就是一個可以像數組一樣處理的數組,它只是一個字符串。