Как вернуть значения из массива?

У меня есть следующий массив:

Array
(
[0] => 32
[1] => Array
(
[uuid] => 92bbf05c-b49e-4950-9d4a-69c226325131
[conversation_uuid] => CON-ee2287cb-ddb7-47e3-9595-0b4d36ac57e3
[status] => failed
[direction] => outbound
)

)

И хочу получить идентификатор и статус, у меня есть следующий код:

<?php

require __DIR__ . '/../env.php';
//TransferLog Tropo

ini_set('display_errors', 1); ini_set('log_errors',1); error_reporting(E_ALL); mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);header('Content-Type: application/json');
$body = file_get_contents('callnexmo.log');
//$body = json_decode($json, true);

//$id=$_GET['id'];
//$body=array($id, $json);

//$req_dump = print_r($body, true );
//$fp = file_put_contents('callnexmo.log', $req_dump);

$conn = new mysqli($servername, $username, $password, $database);

//foreach ($body as $value)
//{
$status=$body[1]['status'];
$to=$body[1]['to'];
$from=$body[1]['from'];
$id=$body[0];

echo " body = $body";
var_dump($body);

echo " status = $status";
var_dump($status);echo " id = $id";
var_dump($id);
//rest of the code

Но выходной получает меня

Warning: Illegal string offset 'status' in /opt/lampp/htdocs/buttoncall/skeleton-application/ficheiros/records/teste.php on line 23

Warning: Illegal string offset 'to' in /opt/lampp/htdocs/buttoncall/skeleton-application/ficheiros/records/teste.php on line 24

Warning: Illegal string offset 'from' in /opt/lampp/htdocs/buttoncall/skeleton-application/ficheiros/records/teste.php on line 25
body = Array
(
[0] => 32
[1] => Array
(
[uuid] => 92bbf05c-b49e-4950-9d4a-69c226325131
[conversation_uuid] => CON-ee2287cb-ddb7-47e3-9595-0b4d36ac57e3
[status] => failed
[direction] => outbound
)

)
string(264) "Array
(
[0] => 32
[1] => Array
(
[uuid] => 92bbf05c-b49e-4950-9d4a-69c226325131
[conversation_uuid] => CON-ee2287cb-ddb7-47e3-9595-0b4d36ac57e3
[status] => failed
[direction] => outbound
)

)
"status = rstring(1) "r"id = Astring(1) "A"

Я делал логику, похожую на эту, и у нее есть работа, но теперь я, кажется, могу ошибиться.
Кто-нибудь может мне помочь?

-1

Решение

$body строка не массив, потому что file_get_contents возвращает содержимое файла, которое является строкой. Так что вы не можете работать с $body как с массивом.

Вы можете анализировать данные из строки с помощью регулярных выражений (взгляните на pre_match а также preg_match_all функции).

0

Другие решения

На самом деле ваше первое утверждение неверно. У вас есть строка, которая «выглядит» как массив.

var_dump() скажу вам это в начале своего вывода: string(264),

На основании вашего header() объявление, кажется, что вы хотите обработать строку json.

Если у вас есть контроль над содержанием callnexmo.logЯ рекомендую вам сохранить данные вашего массива php в виде строки json. Так что это выглядит так:

[32,{"uuid":"92bbf05c-b49e-4950-9d4a-69c226325131","conversation_uuid":"CON-ee2287cb-ddb7-47e3-9595-0b4d36ac57e3","status":"failed","direction":"outbound"}]

Затем, когда вы хотите обработать данные в файле .log, вы можете просто json_decode($string,true) строка для генерации легкодоступного массива.

Если у вас нет контроля над содержанием callnexmo.log И структура массива надежна, тогда вы можете сделать это как можно лучше. пытаться разобрать его с помощью регулярного выражения, но это может или не может быть надежным усилием.

Учитывая ваши опубликованные данные, вот простая демонстрация 🙁Образец Демо) (PHP Demo)

$body='Array
(
[0] => 32
[1] => Array
(
[uuid] => 92bbf05c-b49e-4950-9d4a-69c226325131
[conversation_uuid] => CON-ee2287cb-ddb7-47e3-9595-0b4d36ac57e3
[status] => failed
[direction] => outbound
)

)
';
preg_match_all('/\[([^]]+)\] => (?:Array(*SKIP)(*FAIL)|(.*?)\s+$)/m',$body,$out);
var_export(array_combine($out[1],$out[2]));

Выход:

array (
0 => '32',
'uuid' => '92bbf05c-b49e-4950-9d4a-69c226325131',
'conversation_uuid' => 'CON-ee2287cb-ddb7-47e3-9595-0b4d36ac57e3',
'status' => 'failed',
'direction' => 'outbound',
)

Это не идеальная копия ожидаемого массива — он сплющен — но он должен позволить вам получить нужные значения.

0

Я создал массив и получил значения оттуда.

<?php

require __DIR__ . '/../env.php';
//TransferLog Nexmo

header('Content-Type: application/json');
$json = file_get_contents('php://input');
$request = json_decode($json, true);

$id=$_GET['id'];
$body=array($id, $request);

$req_dump = print_r($body, true );
$fp = file_put_contents('callnexmo.log', $req_dump);

$conn = new mysqli($servername, $username, $password, $database);

foreach ($body as $value)
{
$status=$body[1]["status"];
$to=$body[1]["to"];
$from=$body[1]["from"];
$id=$body[0];
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector