Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Разобрать массив

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Описание: Как разобрать содержимое массива по строкам
SJoe
Отправлено: 28 Ноября, 2016 - 17:00:30
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Нояб. 2016  


Помог: 0 раз(а)




Добрый день всем!

У меня на выходе есть вот такой массив, где данные записываются в следющем формате:

Key: 45; Value: telephone_number
Key: 46; Value: {
Key: 47; Value: "SER" : "Command_CNF",
Key: 48; Value: "SER_res" : "0",
Key: 50; Value: "SER_a_num" : "1,4444444444",
Key: 51; Value: "SER_b_num" : "2,5555555555,9999",
Key: 53; Value: "SER_num_int" : "54634346346",
Key: 54; Value: "SER_num_net" : "1232134234"
Key: 55; Value: telephone_number
и т.д.

Мне нужно данные по конректному номеру записать в одну строку, чтобы в итоге получился следующий форма:
Номер телефона\tА Номер\tБ Номер\tНомер сети

к примеру пытаюсь получить только А номер, но не получается, подскажите пожалуйста где может быть ошибка:
foreach ($report as $key => $value) {
$num_pos = strpos($value, "a_num" : \"");
$imsi = substr($value, $num_pos);
}
 
 Top
Krava
Отправлено: 28 Ноября, 2016 - 17:12:06
Post Id


Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Нояб. 2013  


Помог: 1 раз(а)




Разделяй строчку explode(":", "") ну или я не правильно понял
 
 Top
Строитель Модератор
Отправлено: 28 Ноября, 2016 - 18:42:07
Post Id



Участник


Покинул форум
Сообщений всего: 1581
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 74 раз(а)




SJoe, задача не понятна... Что нужно получить из этой строки:

Key: 50; Value: "SER_a_num" : "1,4444444444"

?
 
 Top
SJoe
Отправлено: 28 Ноября, 2016 - 19:45:43
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Нояб. 2016  


Помог: 0 раз(а)




Строитель пишет:
SJoe, задача не понятна... Что нужно получить из этой строки:

Key: 50; Value: "SER_a_num" : "1,4444444444"

?


из этой строчки получить нужно номер телефона: 4444444444

то есть конечный результат должен выглядит вот так:

Номер телефона\tА Номер\tБ Номер\tНомер сети
telephone_number\t4444444444\t5555555555\t1232134234
telephone_number\t3333333333\t6666666666\t3443434343
и т.д.
 
 Top
Мелкий Супермодератор
Отправлено: 28 Ноября, 2016 - 20:54:05
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Вот почему мне кажется, что у вас вообще JSON в исходнике, который вы потом странным образом выводите?..


-----
PostgreSQL DBA
 
 Top
Строитель Модератор
Отправлено: 28 Ноября, 2016 - 21:02:32
Post Id



Участник


Покинул форум
Сообщений всего: 1581
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 74 раз(а)




SJoe пишет:
Номер телефона\tА Номер\tБ Номер\tНомер сети
Набросал код на регулярках, он работает, но лично мне такая реализация не нравится
Спойлер (Отобразить)

(Отредактировано автором: 28 Ноября, 2016 - 21:06:36)

 
 Top
SJoe
Отправлено: 29 Ноября, 2016 - 00:20:35
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Нояб. 2016  


Помог: 0 раз(а)




Мелкий пишет:
Вот почему мне кажется, что у вас вообще JSON в исходнике, который вы потом странным образом выводите?..



Я действительно почитал про JSON формат и ты прав.
Подскажи как теперь использую json_decode можно это все привести к формату который я описал выше.
Заранее спасибо.
 
 Top
Мелкий Супермодератор
Отправлено: 29 Ноября, 2016 - 10:49:41
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Покажите исходный JSON тогда. Как-то не хочу угадывать его структуру.


-----
PostgreSQL DBA
 
 Top
SJoe
Отправлено: 29 Ноября, 2016 - 11:25:46
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Нояб. 2016  


Помог: 0 раз(а)




Мелкий пишет:
Покажите исходный JSON тогда. Как-то не хочу угадывать его структуру.


вот мой первый скрипт, который дергает сервер для получения результата:

<?php

$test_n = file('test_numbers');

$result = fopen('result','a');

$ch = curl_init();

foreach ($test_n as $msisdn) {

$url = "http://x.x.x.x:xxxx/service=MAPST_SND_RTISM_REQ&version=3&MAPPN_dest_address=6,".trim($msisdn)."&MAPPN_orig_address=8,11111111111&MAPPN_invoke_id=1&MAPPN_msisdn=22222222222&MAPPN_sm_rp_pri=0&MAPPN_sc_addr=11111111111";

fwrite($result);

curl_setopt_array($ch, array(
CURLOPT_URL => "$url",
CURLOPT_VERBOSE => True,
CURLOPT_RETURNTRANSFER => True,
CURLOPT_FILE => $result,
));
curl_exec($ch);
}

curl_close($ch);
fclose($result);

?>

результат записывается в файл "result" в следующем формате:

cat result
{
"service" : "MAPST_SND_RTISM_CNF",
"MAPPN_result" : "0",
"MAPPN_applic_context" : "0x060704000001001403",
"MAPPN_dest_address" : "8,22222222222",
"MAPPN_orig_address" : "6,11111111111,6666",
"MAPPN_invoke_id" : "1",
"MAPPN_imsi" : "456454545454",
"MAPPN_msc_num" : "888888888880"
}{
"service" : "MAPST_SND_RTISM_CNF",
"MAPPN_result" : "0",
"MAPPN_applic_context" : "0x060704000001001403",
"MAPPN_dest_address" : "8,22222222211",
"MAPPN_orig_address" : "6,11111111111,6666",
"MAPPN_invoke_id" : "1",
"MAPPN_imsi" : "357544574547",
"MAPPN_msc_num" : "888888888888"
}

я хочу разобрать этот файл и сгенировать отчет для себя в удобочитаемом виде.

к примеру:

результат \t Номер А \t Номер Б \t IMSI \t Номер сети

когда пытаюсь преобразовать этот файл в массив то получаю ошибку:
$report = file('result');
$obj = json_decode($report);

./report
PHP Warning: json_decode() expects parameter 1 to be string, array given in ../report on line 6

Заранее спасибо.
 
 Top
Мелкий Супермодератор
Отправлено: 29 Ноября, 2016 - 11:53:25
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




PHP:
скопировать код в буфер обмена
  1. $test_n = file('test_numbers', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
  2.  
  3. $ch = curl_init();
  4. $result = [];
  5.  
  6. foreach ($test_n as $msisdn) {
  7.  
  8.  $url = "http://x.x.x.x:xxxx/service=MAPST_SND_RTISM_REQ&version=3&MAPPN_dest_address=6,".urlencode($msisdn)."&MAPPN_orig_address=8,11111111111&MAPPN_invoke_id=1&MAPPN_msisdn=22222222222&MAPPN_sm_rp_pri=0&MAPPN_sc_addr=11111111111";
  9.  
  10.  CURLOPT_URL => "$url",
  11.  CURLOPT_VERBOSE => True,
  12.  CURLOPT_RETURNTRANSFER => True,
  13.  ));
  14.  $response = curl_exec($ch);
  15.  // todo curl_errno, curl_error
  16.  $json = json_decode($response, true);
  17.  if (is_null($json)) {
  18.     // todo error handler, incorrect json response
  19.  }
  20.  $result[] = $json;
  21.  }
  22.  
  23.  curl_close($ch);
  24. file_put_contents('result', json_encode($result));


PHP:
скопировать код в буфер обмена
  1. $result = json_decode(file_get_contents('result'), true);
  2. foreach ($result as $row) {
  3.      echo $row['MAPPN_imsi'], "\t", $row['MAPPN_orig_address'], PHP_EOL;
  4.      // я не понимаю, где тут номера телефонов и прочие нужные данные. По исходному json ключи и значения видны
  5. }


-----
PostgreSQL DBA
 
 Top
SJoe
Отправлено: 29 Ноября, 2016 - 12:17:58
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Нояб. 2016  


Помог: 0 раз(а)






Получю ошибку при выполнение первого скрипта, ругается на эту строку:
file_put_contents('result', json_decode($result));

PHP Warning: json_decode() expects parameter 1 to be string, array given in ../test on line 30
 
 Top
Мелкий Супермодератор
Отправлено: 29 Ноября, 2016 - 12:20:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Я, конечно, запросто и ошибиться могу.
Но у меня вроде при записи json_encode написан.


-----
PostgreSQL DBA
 
 Top
SJoe
Отправлено: 29 Ноября, 2016 - 16:23:58
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Нояб. 2016  


Помог: 0 раз(а)




Мелкий пишет:
Я, конечно, запросто и ошибиться могу.
Но у меня вроде при записи json_encode написан.


Спасибо тебе огромное Улыбка все работает отлично.

Можешь подсказать как в первом скрипте сделать так чтобы в конечный файл result, который содержит маассив данных еще дописывалась переменная $msisdn в каждую строку.

Тогда конечный файл result будет вообще содержать всю необходимую мне информацию, Спасибо тебе большое заранее.
 
 Top
Мелкий Супермодератор
Отправлено: 29 Ноября, 2016 - 16:38:54
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Можно в качестве ключа взять: Строка, вполне подойдёт. Довольно логично получится ключ -> полученный ответ


Можно в ответ добавить новое поле.
PHP:
скопировать код в буфер обмена
  1. $json['orig_msisdn'] =  $msisdn;
  2. $result[] = $json;


Можно обернуть ещё в один контейнер:
PHP:
скопировать код в буфер обмена
  1. $row = [
  2.      'orig_msisdn' => $msisdn,
  3.      'response' => $json,
  4. ];
  5. $result[] = $row;


-----
PostgreSQL DBA
 
 Top
SJoe
Отправлено: 29 Ноября, 2016 - 16:59:03
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Нояб. 2016  


Помог: 0 раз(а)




Второй вариант то что доктор прописал Улыбка

Спасибо тебе большое. Очень помог и выручил.

Если можешь посоветуй пожалуйста, хороший ресур чтобы почитать про json. Спасибо еще раз,
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB