2011-04-11 41 views
1

我有一個希望很快的問題。 我已經把一個數組放在一個常量中,但是當我添加數組鍵的時候,它會出來。我的代碼如下。PHP數組鍵在一個常量

<?php define("my_const_arr", serialize(array("page_ids" => array("1234", "4123")))); ?> 

<?php $page_id = "4123"; ?> 

<?php if(in_array($page_id, unserialize(my_const_arr["page_ids"]))): ?> 
<h1>Hello Stackoverflow</h1> 
<?php endif; ?> 
+1

訪問你不應該使用這樣的常量。如果你想存儲一個數組,使用一個變量。 – mario 2011-04-11 16:35:05

回答

1

您不能在那一點做my_const_arr["page_ids"],因爲它仍然是一個字符串。你應該先反序列化,然後訪問它

$arr = unserialize(my_const_arr); 
if(in_array($page_id, $arr["page_ids"])): 
+0

謝謝JohnP! 還有一個問題,如果你可以騰出時間?這樣做有什麼缺點(即這些方法真的如何徵稅)? Khez似乎認爲我沒有正確使用序列化/反序列化....或PHP。 – Smccullough 2011-04-11 17:02:22

+0

這取決於。除非這些陣列是巨大的,否則由於性能而將它們切換到其他任何東西都是過早的微觀優化。但是,使用靜態類有點清潔,並封裝了你的數組。 – JohnP 2011-04-11 17:06:01

+0

因此,公平地說,Heiko Bublitz的過程在大多數應用/場景中更適合? – Smccullough 2011-04-11 17:13:27

1
<?php $arr = unserialize(my_const_arr) ?>  
<?php if(in_array($page_id, $arr["page_ids"])): ?> 

改變這種方式

2

您同時使用反序列化和PHP輕度錯誤:

<?php 
define("my_const_arr", serialize(array("page_ids" => array("1234", "4123")))); 
$page_id = "4123"; 
$a=unserialize(my_const_arr); // you need to usnerialize it before you can search for a specific key 
if(in_array($page_id, $a["page_ids"])): ?> 
<h1>Hello Stackoverflow</h1> 
<?php endif; ?> 

我也想指出常量在你可以控制的應用程序中並不特別有用。特別是如果該代碼與您的應用程序非常相關。

<?php 
$_myConstArr=array("page_ids" => array("1234", "4123")); 

$page_id = "4123"; 
if(in_array($page_id, $_myConstArr["page_ids"])): ?> 
<h1>Hello Stackoverflow</h1> 
<?php endif; ?> 

這樣做你不會得到太多開銷。我認爲調用serialize/unserialize往往會給你不需要的處理。

發佈您的確切場景並提供更好的解決方案。

1

'my_const_arr'是一個常量,而不是一個數組。
所以,my_const_arr["page_ids"]是不正確的。

也許你可以試試這個:

$my_const_arr = unserialize(my_const_arr); 
echo if(in_array($page_id,$my_const_arr)) 'HELLO STACKOVERFLOW' : ''; 
1

如果有該字符串轉換沒有真正的需要,爲什麼不能用一個簡單的類用作恆定值的容器,如: 編輯:對不起,只是留下工作的辦法:

Class MyConstants { 
    public static $PAGE_IDS = array(1234, 4123); 
} 

外,您可以像

if (in_array(4123, MyConstants::$PAGE_IDS)) { 
    echo "got you! <br/>\n"; 
} 
+0

感謝您的輸入Heiko :)我現在將保持這一個在後面的燃燒器。 – Smccullough 2011-04-11 17:06:32

+1

哈哈,沒有。這沒有用。即使包裝在類中,常量也不能保存數組。 – mario 2011-04-11 17:17:38

+0

-1你不能真正將數組聲明爲這樣的常量。請更新 – JohnP 2011-04-11 17:17:45