Я использую форму для получения данных и перебираю эти данные для создания различных массивов в файле с именем 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 вообще, но кажется, что это должно быть очень просто. У вас есть массив — вы правильно вызываете значения, используя имя массива и ключ индекса?






У вас нигде нет переменной с именем $let. У вас есть только $data, $k и $v. $k имеет значение let, и в это время $v имеет массив значений для этого ключа. Если вы хотите получить доступ к данным для этого ключа, массив находится по адресу $data['let'], поэтому шеф-поваром для этого является $data['let']['chef'].
Очень жаль, что я не спросил вас, ребята, два дня назад!!! Спасибо - я пытался вытащить вещи, используя имя массива, но знал, что где-то пропустил шаг. Это работает. Вы великолепны.
Думаю, вы можете захотеть
echo $data['let']['chef'];вместоvar_dump($let['chef']);