PHP 数组键在常量中

发布于 2024-10-31 21:44:08 字数 356 浏览 1 评论 0原文

我有一个希望很快的问题。 我已将数组放置在常量中,但是当我添加数组键时,它会崩溃。我的代码如下。

<?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; ?>

I have a hopefully quick question.
I have placed an array in a constant but when I add array keys it craps out. My code below.

<?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; ?>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

提赋 2024-11-07 21:44:08

此时您无法执行 my_const_arr["page_ids"] 因为它仍然是一个字符串。您应该先将其反序列化,然后再访问它

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

You can't do my_const_arr["page_ids"] at that point because it's still a string. You should unserialize it first and then access it

$arr = unserialize(my_const_arr);
if(in_array($page_id, $arr["page_ids"])):
渡你暖光 2024-11-07 21:44:08

您同时使用 unserialize 和 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; ?>

这样做不会带来太多开销。我认为经常调用序列化/反序列化会给你带来不需要的处理。

发布您的确切场景,可能会提供更好的解决方案。

You're using both unserialize and PHP mildly wrong:

<?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; ?>

I would also like to point out that constants aren't particularly useful in an application you can control. Especially if that code is very relevant to your app.

<?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; ?>

You will not get much overhead by doing this. I'd think that calling serialize/unserialize often would give you unwanted processing.

Post your exact scenario and a better solution might be made available.

狠疯拽 2024-11-07 21:44:08
<?php $arr = unserialize(my_const_arr) ?>    
<?php if(in_array($page_id, $arr["page_ids"])): ?>

改成这样

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

Change it that way

迷荒 2024-11-07 21:44:08

'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' : '';

'my_const_arr' is a constant, not an array.
So,my_const_arr["page_ids"] is incorrect.

Maybe you can try this:

$my_const_arr = unserialize(my_const_arr);
echo if(in_array($page_id,$my_const_arr)) 'HELLO STACKOVERFLOW' : '';
伴我老 2024-11-07 21:44:08

如果没有真正需要字符串转换,为什么不使用简单的类作为常量值的容器,例如:
编辑:抱歉,只是留下一个工作方法:

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

在外面你可以像这样访问它

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

If there's no real need for the string-conversion, why not use a simple class as a container for constant values, like:
EDIT: Sorry, just to leave a working approach:

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

Outside you can access it like

if (in_array( 4123, MyConstants::$PAGE_IDS )) {
    echo "got you! <br/>\n";
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文