Помогите понять не сложный PHP

206
20 апреля 2021, 00:20

Я в PHP вообще ни бум-бум. JS немного шарю. Помогите понять что тут происходит.

    global $data;
    $data=array();
    $data["th"]=array();
    $data["th"][0]=array("name"=>"Автовышки","name1"=>"автовышек","name2"=>"автовышки","alias"=>"avtovyshki");
    $data["th"][1]=array("name"=>"Автокраны","name1"=>"автокранов","name2"=>"автокрана","alias"=>"avtokrany");
    $data["th"][2]=array("name"=>"Бульдозеры","name1"=>"бульдозеров","name2"=>"бульдозера","alias"=>"buldozery");
    $data["teh"]=array();
    foreach($data["th"] as $t)
    {
    $data["teh"][$t["alias"]]=$t;
    }

По сути он создал Массив "data", внутри этого массива еще 2 массива "th" и "teh". Внутри "th" еще массивы, с этим все ясно.

Непонятня ситуация, когда он начинает перебирать массив "th" и присваивать каждый его элемент $t. А далее:

$data["teh"][$t["alias"]]=$t;

Как понять?

И еще:

global $data;

Я правильно понимаю, что для того чтобы использовать эти данные в другом php файле нужно как то подключить данный файл, с помощью require или include? Так как очень долго искал где же подключается этот файл (data.php), но так и не нашел.

Answer 1

С конца:

global $data;

Слишком мало информации, но с уверенностью в 99% можно сказать что ваш кусок - это тело функции... Видимо тот кто писал, хочет чтоб манипуляции были с переменной которую дальше ведет по программе (а именно $data). Это плохой тон программирования, слишком много минусов у такого подхода, использовать не рекомендую.

$a = 1;
$b = 2;
function test_func() {
    global $a;
    echo $a; // - Выведет 1
    echo $b; // - Ничего не выведет, будешь предупреждение что переменная не существует
}
test_func();

По поводу использования данных в других файлах, вам нужно почитать вот это:

https://www.php.net/manual/ru/language.variables.scope.php

https://www.php.net/manual/ru/function.include.php

https://www.php.net/manual/ru/function.require.php

Там все в примерчиках...

Теперь ко второму:

$data["teh"][$t["alias"]]=$t;

У нас есть массив $data["th"]:

$data["th"]    = array();
$data["th"][0] = ...
$data["th"][1] = ...
$data["th"][2] = ...

С этим Вам вроде все понятно, дальше в цикле мы перебираем этот массив и каждый элемент поочередно присваиваем в $t, Вам тоже это понятно, давайте на первом элементе разберем, т.е. на первой итерации цикла у Вас:

$t = array(
    "name" => "Автовышки",
    "name1" => "автовышек",
    "name2" => "автовышки",
    "alias" => "avtovyshki"
);

Собственно, чтобы вывести на экран avtovyshki, нам нужно написать echo $t["alias"]. Так-же вы правильно заметили что создается массив teh, тут - $data["teh"]=array().

А теперь смотрите:

$data["teh"][$t["alias"]]=$t;

Для первой итерации выглядит так:

$data["teh"]["avtovyshki"] = array(
    "name" => "Автовышки",
    "name1" => "автовышек",
    "name2" => "автовышки",
    "alias" => "avtovyshki"
);

Все переменные я вам показал выше, простая постановка :) ...

READ ALSO
PHP | MySQL Разобрать масив и сохранить в БД

PHP | MySQL Разобрать масив и сохранить в БД

Есть масив который хочу разобрать и записать в новую БДВсе что я пробовал не дало ожидаемого результата, а подозрение , что это намного проще...

82
Не знаю как исправить ошибку: Exception in thread “main” java.util.InputMismatchException

Не знаю как исправить ошибку: Exception in thread “main” java.util.InputMismatchException

Недавно начал учить Java и постоянно сталкиваюсь с ошибками которых не могу исправить, поэтому прошу помощиВот код:

96
Метод get не передаёт значения переменной

Метод get не передаёт значения переменной

Есть два класса: Main и CyclesИз класса Cycles методом get() должно передаваться значение переменной SecSycles в класс Main в переменную MainCycle, но её значение...

92
Не работает удалённый сервис

Не работает удалённый сервис

В программе есть 1 интерфейс и 2 класса:

96