2011-04-11 43 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