Как получить индекс из массива, созданного с помощью цикла foreach и находящегося внутри текстового файла?

Я использую форму для получения данных и перебираю эти данные для создания различных массивов в файле с именем data.txt. Я пытаюсь вытащить индекс каждого массива отдельно. Я хочу иметь возможность эхо (arry1 - value1) в определенном div на странице и эхо (arry1 - value2) в другом div на странице и т.д.

Я могу заставить массивы печатать, но когда я пытаюсь вызвать только один конкретный индекс из одного конкретного массива, я либо получаю ответ NULL, либо страница читает «эта страница не работает»

Вот как выглядит мой файл data.txt — он правильно берет данные из формы. Но если эти две группы являются массивами, почему я не могу вытащить информацию по одному индексу за раз?

данные.txt

{
"let": {
"chef": "tema",
"bio": "temabio",
"image": "temaimage",
"special_name": "pears",
"special_descr": "purple",
"child_name": "bob",
"child_descr": "opie"
},
"cafe": {
"chef": "herb",
"bio": "herbbio",
"image": "herbimage",
"special_name": "apple",
"special_descr": "mike",
"child_name": "Rob Davis",
"child_descr": "blue"
}
}

action.php

    <?php
if (isset($_POST['submit'])) {
    $data = json_decode(file_get_contents("data.txt"), true); // true for assoc
    $data[$_POST['restaurant']] = array(
        "chef" => $_POST['chef'],
        "bio" => $_POST['bio'],
        "image" => $_POST['image'],
        "special_name" => $_POST['special_name'],
        "special_descr" => $_POST['special_descr'],
        "child_name" => $_POST['child_name'],
        "child_descr" => $_POST['child_descr']
    );
    $newData = json_encode($data);
    file_put_contents("data.txt", $newData);
}
?>

load.php

<?php
$data = json_decode(file_get_contents("data.txt"), true); // true for assoc

foreach($data as $k => $v) {
    echo "<p>" . PHP_EOL;
    echo "Restaurant " . $k . "is" . $v . "<br />" . PHP_EOL;
    echo "Chef: " . $v['chef'] . "<br />" . PHP_EOL;
    echo "bio: " . $v['bio'] . "<br />" . PHP_EOL;
    echo "image: " . $v['image'] . "<br />" . PHP_EOL;
    echo "Name: " . $v['special_name'] . "<br />" . PHP_EOL;
    echo "Description: " . $v['special_descr'] . "<br />" . PHP_EOL;
    echo "Children: " . $v['child_name'] . "<br />" . PHP_EOL;
    echo "Description: " . $v['child_descr'] . "<br />" . PHP_EOL;
    echo "</p>" . PHP_EOL;  
    }
    var_dump($let['chef']);


?>
<?php
$myfile = fopen("data.txt", "r") or die("Unable to open file!");
echo fread( $myfile,filesize("data.txt"));


fclose($myfile);


?>

Это ответ:

Restaurant letisArray
Chef: tema
bio: temabio
image: temaimage
Name: pears
Description: purple
Children: bob
Description: opie



Restaurant cafeisArray
Chef: herb
bio: herbbio
image: herbimage
Name: apple
Description: mike
Children: Rob Davis
Description: blue


NULL {"let":{"chef":"tema","bio":"temabio","image":"temaimage","special_name":"pears","special_descr":"purple","child_name":"bob","child_descr":"opie"},"cafe":{"chef":"herb","bio":"herbbio","image":"herbimage","special_name":"apple","special_descr":"mike","child_name":"Rob Davis","child_descr":"blue"}}

Ответ гласит, что «let is Array», так почему я не могу извлечь из него информацию, как должен?

Все они ответили NULL - я пробовал их внутри функции, вне функции, на разных страницах и т. д. Я попытался использовать второй цикл foreach внутри первого цикла, чтобы получить информацию, но у меня так и не получилось.

var_dump($let['chef']);
var_dump($let[ "Chef:" "chef"]);
echo($let["bio"]);
echo "Chef: " . $let['chef'] . "<br />" . PHP_EOL;
var_dump($cafe);

print_r ($myfile);

echo $myfile($let["bio"]);;

echo "bio: " . $let['bio'] . "<br />" . PHP_EOL;
echo "Chef: " . $let['chef'] . "<br />" . PHP_EOL;


 var_dump($restaurant['let']);
    var_dump($restaurant["let"]["chef"])

Если кто-нибудь может сказать мне, как вытащить каждое значение отдельно, это было бы здорово. Я хочу иметь возможность печатать значение ключа «шеф-повар» из массива $let и так далее. - Я пробую это уже 2 дня, и я не знаю, что еще попробовать. Конечно, я очень новичок в программировании, и я не знаю PHP вообще, но кажется, что это должно быть очень просто. У вас есть массив — вы правильно вызываете значения, используя имя массива и ключ индекса?

Думаю, вы можете захотеть echo $data['let']['chef']; вместо var_dump($let['chef']);

Nigel Ren 19.02.2019 16:28
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У вас нигде нет переменной с именем $let. У вас есть только $data, $k и $v. $k имеет значение let, и в это время $v имеет массив значений для этого ключа. Если вы хотите получить доступ к данным для этого ключа, массив находится по адресу $data['let'], поэтому шеф-поваром для этого является $data['let']['chef'].

Очень жаль, что я не спросил вас, ребята, два дня назад!!! Спасибо - я пытался вытащить вещи, используя имя массива, но знал, что где-то пропустил шаг. Это работает. Вы великолепны.

kat 19.02.2019 16:46

Другие вопросы по теме