Ключи массива PHP в константе - PullRequest
1 голос
/ 11 апреля 2011

У меня, надеюсь, быстрый вопрос.Я поместил массив в константу, но когда я добавляю ключи массива, он вылетает.Мой код ниже.

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

Ответы [ 5 ]

2 голосов
/ 11 апреля 2011

Вы используете как несериализованный, так и 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 голос
/ 11 апреля 2011

Если нет реальной необходимости преобразования строк, почему бы не использовать простой класс в качестве контейнера для постоянных значений, например: РЕДАКТИРОВАТЬ: Извините, просто чтобы оставить рабочий подход:

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

СнаружиВы можете получить к нему доступ как

if (in_array( 4123, MyConstants::$PAGE_IDS )) {
    echo "got you! <br/>\n";
}
1 голос
/ 11 апреля 2011

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 голос
/ 11 апреля 2011
<?php $arr = unserialize(my_const_arr) ?>    
<?php if(in_array($page_id, $arr["page_ids"])): ?>

Измените это так

1 голос
/ 11 апреля 2011

Вы не можете сделать my_const_arr["page_ids"] в этот момент, потому что это все еще строка.Вы должны сначала отключить его сериализацию, а затем получить к нему доступ

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