У меня есть файл init.php со следующим кодом:

$engines = [
    "id" => [
        'A',
        'B',
        'C'
        ],
    "url" => [
        'D',
        'E',
        'F'
        ]
];
return $engines;

Как вы можете видеть в этом файле, есть только массив, который нужен для инициализации сайта, который включен в другой файл следующим образом:

    $engines = require "init.php"; //the file with the array
    $urlsite='';

    switch ($_POST['engn'])
    {   
        case $engines['id'][0]: 
            $urlsite=$engines['url'][0]."/download/"; 
            break;  
        case $engines['id'][1]:
            $urlsite=$engines['url'][1]."/fixes/";
            break;  
        case $engines['id'][2]: 
            $urlsite=$engines['url'][2]."/12555/";
            break;
        default:
            echo '{"err":"true","errtype":"1"}';
            break;
    }

Проблема в том, что массив $ engine кажется нулевым (или чем-то подобным) при вызове в операторе switch.

Я также попытался удалить команду return в init.php и включить ее без присваивания, но в этом случае массив вообще не существует (верните мне исключение ошибка несуществующей переменной в операторе switch ). Не могу понять в чем дело.

Как использовать массив в другом файле?

Большое спасибо.

Изменить: я использую EasyPHP с версией php 5.4.24

0
user2073384 10 Мар 2015 в 21:59

2 ответа

Лучший ответ

Вы устанавливаете $engines в значение оператора require. Просто не делайте этого, и все должно работать нормально. Другими словами, измените:

$engines = require "init.php"; //the file with the array

Чтобы :

require "init.php"; //the file with the array

И удалите оператор return из init.php.

Это работает, потому что require просто включает код из внешнего файла в текущий файл до его выполнения. Хотя в необычных обстоятельствах его можно использовать так, как вы пытались, в этом случае ему не нужно запускать и возвращать значение, подобное функции. Поскольку вы установили значение для $engines в init.php, массив будет создан кодом, когда он будет запущен вашим текущим файлом.

0
cronoklee 11 Мар 2015 в 11:57

Init.php SB

<?php

$engines = [
    "id" => [
        'A',
        'B',
        'C'
        ],
    "url" => [
        'D',
        'E',
        'F'
        ]
];
?>

Вам не нужно использовать return там, тогда, как сказал cronoclee ...

0
Cups 10 Мар 2015 в 19:06