Как правильно найти значение в строке объектов?
Ищу второй день)
Вот что вышло
//Сама строка где я и ищу {"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'
если поиск другой, то нужно описание словами что нужно
Нужно найти в строках значения по симаолам
Идут строки
{"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 и так далее . Для записи значений в бд
if($value['s']=='XRPUSDT'){$sellXRPUSDT=$value['b'];}}
echo'Test pr-----: ' .$sellXRPUSDT.'
'; // выводит XRPUSDT
Делаю так
Uncaught TypeError: Cannot access offset of type string on string
$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";
TEST----- java ---TEST---------->: 0.62510000
TEST----- java ---TEST---------->: 0
То есть там если не меняется значение, то сокет не обновляет результат. Не подскажете как сохранить просто старое значение если от сокета не передается значение?
за неимением подробностей подсказать детальнее невозможно
Ответы:
<?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); |
<?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] => 0.64420000 [BNBUSDT] => 0.64420000 ) |
Array ( [XRPUSDT] => 0.64420000 [BNBUSDT] => 0.64420000 )
- Спасибо за ответ. Откуда берется $streams?
У меня$client = new WebSocketClient("wss://stream.binance.com:9443/stream?streams=xrpusdt@bookTicker/bnbusdt@bookTicker"); ///и задаю переменную $json_str $json_str = $client->receive(); //строка в которой ищем
$client = new WebSocketClient("wss://stream.binance.com:9443/stream?streams=xrpusdt@bookTicker/bnbusdt@bookTicker"); ///и задаю переменную $json_str $json_str = $client->receive(); //строка в которой ищем
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для поиска значения в строке объектов в 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);
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);
3. Если объекты представлены в формате JSON, можно декодировать строку и получить доступ к значениям:
$string = '{"Object1": "value1", "Object2": "value2", "Object3": "value3"}'; $data = json_decode($string, true); print_r($data);
4. Если объекты представлены в формате query string, можно воспользоваться функцией parse_str:
$string = "Object1=value1&Object2=value2&Object3=value3"; parse_str($string, $data); print_r($data);
Выберите подходящий метод в зависимости от формата строки и структуры объектов в вашем случае. Надеюсь, это поможет вам найти значение в строке объектов в PHP.