Как правильно найти значение в строке объектов?

Ссылка скопирована
PHP
1 ответ

Ищу второй день)
Вот что вышло

//Сама строка где я и ищу {"stream":"xrpusdt@bookTicker","data":{"u":10936805954,"s":"XRPUSDT","b":"0.64420000","B":"3076.00000000","a":"0.64440000","A":"6180.00000000"}} //и также в таком виде  Array ( [stream] => xrpusdt@bookTicker [data] => Array ( [u] => 10937005616 [s] => XRPUSDT [b] => 0.64740000 [B] => 1053.00000000 [a] => 0.64750000 [A] => 118958.00000000 ) )  $message2 = json_decode($message, true); foreach($message2 as $index => $value) { } $pr=$message2[$index]['s']; if($pr=='XRPUSDT'){$pr2=$message2[$index]['b'];} echo'Test pr-----: ' .$pr.'<br>'; // выводит XRPUSDT echo'Test pr-----: ' .$pr2.'<br>'; // выводит 0.64420000

//Сама строка где я и ищу {"stream":"xrpusdt@bookTicker","data":{"u":10936805954,"s":"XRPUSDT","b":"0.64420000","B":"3076.00000000","a":"0.64440000","A":"6180.00000000"}} //и также в таком виде Array ( [stream] => xrpusdt@bookTicker [data] => Array ( [u] => 10937005616 [s] => XRPUSDT [b] => 0.64740000 [B] => 1053.00000000 [a] => 0.64750000 [A] => 118958.00000000 ) ) $message2 = json_decode($message, true); foreach($message2 as $index => $value) { } $pr=$message2[$index]['s']; if($pr=='XRPUSDT'){$pr2=$message2[$index]['b'];} echo'Test pr-----: ' .$pr.'<br>'; // выводит XRPUSDT echo'Test pr-----: ' .$pr2.'<br>'; // выводит 0.64420000

Пробовал foreach key val и т.д -- выдает ошибки. различные
В принципе поиск работает. Но он какой то странный.
Подскажите как это все сделать корректно??

Дополнительно:

код должен быть в соответствующем теге
и зачем $index, если можно использовать 'data'
если поиск другой, то нужно описание словами что нужно

  • Оформите код через кнопку над формой </>
  • Дмитрий, Оформил
  • IvanU7n,
    Нужно найти в строках значения по симаолам
    Идут строки
    {"stream":"xrpusdt@bookTicker","data":{"u":10936805954,"s":"XRPUSDT","b":"0.64420000","B":"3076.00000000","a":"0.64440000","A":"6180.00000000"}}
    {"stream":"xrpusdt@bookTicker","data":{"u":10936805954,"s":"BNBUSDT","b":"0.64420000","B":"3076.00000000","a":"0.64440000","A":"6180.00000000"}}
    и так далее
    Я ищу значение b для символа XRPUSDT и так далее. В итоге хочу получить $XRPUSDT = 0.64420000 $BNBUSDT= 0.34560000 и так далее . Для записи значений в бд
  • Sun2790, так вы в теле цикла и работайте
  • Дмитрий, foreach ($message2 as $key => $value) {
    if($value['s']=='XRPUSDT'){$sellXRPUSDT=$value['b'];}}
    echo'Test pr-----: ' .$sellXRPUSDT.'
    '; // выводит XRPUSDT

    Делаю так
    Uncaught TypeError: Cannot access offset of type string on string

  • Sun2790, откуда эти разные JSON-фрагменты? итерировать нужно по ним типа
    $sellXRPUSDT = 0; $sellBNBUSDT = 0; foreach по JSON-кускам {   if ($message2['data']['s'] == 'XRPUSDT') {     $sellXRPUSDT = $message2['data']['b'];   }   if ($message2['data']['s'] == 'BNBUSDT') {     $sellBNBUSDT = $message2['data']['b'];   } } echo 'Test pr-----: ' . $sellXRPUSDT . "n"; echo 'Test pr-----: ' . $sellBNBUSDT . "n";

    $sellXRPUSDT = 0; $sellBNBUSDT = 0; foreach по JSON-кускам { if ($message2['data']['s'] == 'XRPUSDT') { $sellXRPUSDT = $message2['data']['b']; } if ($message2['data']['s'] == 'BNBUSDT') { $sellBNBUSDT = $message2['data']['b']; } } echo 'Test pr-----: ' . $sellXRPUSDT . "n"; echo 'Test pr-----: ' . $sellBNBUSDT . "n";

  • IvanU7n, Респект. Так работает. Только иногда выдает
    TEST----- java ---TEST---------->: 0.62510000
    TEST----- java ---TEST---------->: 0
    То есть там если не меняется значение, то сокет не обновляет результат. Не подскажете как сохранить просто старое значение если от сокета не передается значение?
  • Sun2790, где-то сохранять (файл, БД) после цикла, и подгружать перед циклом
    за неимением подробностей подсказать детальнее невозможно
  • Ответы:

    &lt;?php  $streams = [ '{"stream":"xrpusdt@bookTicker","data":{"u":10936805954,"s":"XRPUSDT","b":"0.64420000","B":"3076.00000000","a":"0.64440000","A":"6180.00000000"}}',  '{"stream":"xrpusdt@bookTicker","data":{"u":10936805954,"s":"BNBUSDT","b":"0.64420000","B":"3076.00000000","a":"0.64440000","A":"6180.00000000"}}'     ];  $result = []; foreach($streams as $json_str) {     $data = json_decode($json_str, true); //сама строка  json в которой ищем          //var_dump($data['data']);          if(in_array($data['data']['s'], [         'XRPUSDT',         'BNBUSDT',        ])) {         $result[$data['data']['s']] = $data['data']['b'];     } }  print_r($result);

    &lt;?php $streams = [ '{"stream":"xrpusdt@bookTicker","data":{"u":10936805954,"s":"XRPUSDT","b":"0.64420000","B":"3076.00000000","a":"0.64440000","A":"6180.00000000"}}', '{"stream":"xrpusdt@bookTicker","data":{"u":10936805954,"s":"BNBUSDT","b":"0.64420000","B":"3076.00000000","a":"0.64440000","A":"6180.00000000"}}' ]; $result = []; foreach($streams as $json_str) { $data = json_decode($json_str, true); //сама строка json в которой ищем //var_dump($data['data']); if(in_array($data['data']['s'], [ 'XRPUSDT', 'BNBUSDT', ])) { $result[$data['data']['s']] = $data['data']['b']; } } print_r($result);

    Array (     [XRPUSDT] =&gt; 0.64420000     [BNBUSDT] =&gt; 0.64420000 )

    Array ( [XRPUSDT] =&gt; 0.64420000 [BNBUSDT] =&gt; 0.64420000 )

    • Спасибо за ответ. Откуда берется $streams?
      У меня
      $client = new WebSocketClient("wss://stream.binance.com:9443/stream?streams=xrpusdt@bookTicker/bnbusdt@bookTicker"); ///и задаю переменную $json_str $json_str = $client-&gt;receive(); //строка в которой ищем

      $client = new WebSocketClient("wss://stream.binance.com:9443/stream?streams=xrpusdt@bookTicker/bnbusdt@bookTicker"); ///и задаю переменную $json_str $json_str = $client-&gt;receive(); //строка в которой ищем

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Анна SEO Ответ

    Для поиска значения в строке объектов в PHP можно воспользоваться различными методами в зависимости от структуры объектов и формата строки. Вот несколько способов, которые могут быть полезны:

    1. Использование функции preg_match_all для поиска значений по регулярному выражению:

    $string = "Object1: value1, Object2: value2, Object3: value3";
    $pattern = '/Object\d+: ([^,]+)/';
    preg_match_all($pattern, $string, $matches);
    $values = $matches[1];
    print_r($values);

    $string = "Object1: value1, Object2: value2, Object3: value3"; $pattern = '/Object\d+: ([^,]+)/'; preg_match_all($pattern, $string, $matches); $values = $matches[1]; print_r($values);

    2. Использование функции explode для разделения строки на массив и последующего поиска значения:

    $string = "Object1: value1, Object2: value2, Object3: value3";
    $objects = explode(", ", $string);
    $values = [];
    foreach($objects as $object) {
        list($key, $value) = explode(": ", $object);
        $values[$key] = $value;
    }
    print_r($values);

    $string = "Object1: value1, Object2: value2, Object3: value3"; $objects = explode(", ", $string); $values = []; foreach($objects as $object) { list($key, $value) = explode(": ", $object); $values[$key] = $value; } print_r($values);

    3. Если объекты представлены в формате JSON, можно декодировать строку и получить доступ к значениям:

    $string = '{"Object1": "value1", "Object2": "value2", "Object3": "value3"}';
    $data = json_decode($string, true);
    print_r($data);

    $string = '{"Object1": "value1", "Object2": "value2", "Object3": "value3"}'; $data = json_decode($string, true); print_r($data);

    4. Если объекты представлены в формате query string, можно воспользоваться функцией parse_str:

    $string = "Object1=value1&amp;Object2=value2&amp;Object3=value3";
    parse_str($string, $data);
    print_r($data);

    $string = "Object1=value1&amp;Object2=value2&amp;Object3=value3"; parse_str($string, $data); print_r($data);

    Выберите подходящий метод в зависимости от формата строки и структуры объектов в вашем случае. Надеюсь, это поможет вам найти значение в строке объектов в PHP.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно