Задать вопрос
@rapidum_alder

Кто поможет объяснить разницу между данными и переменными?

Хочу сделать сложную структуру.
[Да потом будет база SQL но проблема есть и я хочу понять в чем ошибка.
Вдруг потом ещё раз с ней встречусь]
Тут у меня есть небольшой JSON файл выступающий в роли базы.
И я хочу обратиться к определенным данным лежащим там.
Но встретился с проблемой. Хочу вызвать объект по имени, а выходит Шиш [NULL].

<?php 

class Player {
    public function take($id){
        $config = json_decode(file_get_contents($id.'.json'));
        $out='';
        foreach((array)$config->Player as $key => $value){
            $out .= '<input type="button" value="'.$key.'" onclick="nextLevel(\''.$key.'\', \'agReSortPosition\')">'.$key.'</input>';
        }
        return $out;
    }
    public function takeRebudTest($id){
        $config = json_decode(file_get_contents($id['1'].'.json'));
        $out[]= $config->Player->Admin;
        $out[]= $id;
        foreach((array)$config->Player as $key => $value){
            $out[]=$key;
            $out[]=$value;
            $out[]=$id['1'];
            if ($key === $id['1']){$out['mess'] = 1;}
        }
        return $out;
    }
}


$post = json_decode(file_get_contents('php://input'));
$route = explode('_', $post->ident);
$class = array_shift($route); 
$method = mb_strtolower(array_shift($route));
if(is_array($route)) {
    foreach($route as $part){
        $method .= ucfirst($part);
    }
} 
if(class_exists($class)){$factory = new $class;}
if(isset($factory) && is_object($factory) && method_exists($factory, $method) === true){
  $out = $factory->$method($post->metod);
} else {
  $out = ['method doesnt find'];
}
echo json_encode($out);
die();
?>


var url='test.php';

function i(c) {return document.getElementById(c);}
function k(c) {return document.getElementsByClassName(c)[0];}
function Start() {
  fetch(url, {
    method: 'POST',
    body: JSON.stringify({"ident" : "Player_take", "metod":"agReSortPosition"}),
}).then(response => response.json())
.then((data) =>  i('Select_view').innerHTML = data)
}

function nextLevel($s_2, $s_1){
  fetch(url, {
    method: 'POST',
    body: JSON.stringify({"ident" : "Player_take_rebud_Test", "metod" : [$s_2, $s_1]}),
}).then(response => response.json())
.then((data) =>  i('Select_view').innerHTML = data)
}

Это JSON agReSortPosition.json
{
    "Player":{
        "Admin":[ "28", "34"],
        "Tester": ["37","74"],
        "User": ["91","01"],
        "Dezigner": ["45","17"]
    }

}


В функции takeRebudTest я хочу обращаться к $config->Player->$id['0']; и получать ["28", "34"] но я получаю Null.

Я проверяю $key === $id['0'] но они одинаковые. В devtools я получаю:

{0: ["28", "34"], 1: null, 2: ["Admin", "agReSortPosition"], 3: "Admin", 4: ["28", "34"], 5: "Admin",…}
0: ["28", "34"]
1: null
2: ["Admin", "agReSortPosition"]
3: "Admin"
4: ["28", "34"]
5: "Admin"
6: "Tester"
7: ["37", "74"]
8: "Admin"
9: "User"
10: ["91", "01"]
11: "Admin"
12: "Dezigner"
13: ["45", "17"]
14: "Admin"
mess: 1


Это скорее всего простой вопрос, но простите я пока безграмотен, и найти ответ на этот вопрос я пока не смог.
Заранее Благодарен.
  • Вопрос задан
  • 185 просмотров
Подписаться 2 Средний 1 комментарий
Решения вопроса 1
@rapidum_alder Автор вопроса
Все разобрался,
var url='test.php';
function i(c) {return document.getElementById(c);}
function new_fetch(post){ return fetch(url, {method: 'POST',  body: JSON.stringify(post),}).then(response => response.json())}
function Start() {$post={"ident" : "Player_take", "metod":"agReSortPosition"};
  new_fetch($post).then((data) =>  i('Select_view').innerHTML = data)}
function nextLevel($s_2, $s_1){$post={"ident" : "Player_take_Rebud_test", "metod":{"name":$s_1, "style":$s_2}};
  new_fetch($post).then((data) =>  i('Select_view').innerHTML = data)}


Поменял JS, теперь вместо массивов я отправляю объекты.
public function takeRebudTest($id){
        $config = json_decode(file_get_contents($id->name.'.json'), true);
        foreach($config['Player'][$id->style] as  $value){
            $out[]=$value;
                    }
        return $out;
    }


И поменял функцию takeRebudTest.
Я как понял, не мог обращаться к Json Объектам через переменные.
Но я могу обращаться к JSON как к массиву.
$config = json_decode(file_get_contents($id->name.'.json'), true);
И у меня заработало.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Lord_Dantes
Кто поможет объяснить разницу между данными и переменными?

Данные — зарегистрированная информация[1]:439; представление фактов, понятий или инструкций в форме, приемлемой для общения, интерпретации, или обработки человеком или с помощью автоматических средств.

Переменная — поименованная, либо адресуемая иным способом область памяти, адрес которой можно использовать для осуществления доступа к данным и изменять значение в ходе выполнения программы.

Или вкратце данные находятся в переменной если они где-то используются. Но и переменную с данными можно назвать данные. Ну вот так вот.

А описание не читал, к вопросу не относится.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы