Обработка JSON, получить элементы.

seosniks
На сайте с 13.08.2007
Offline
379
639

Добрый день.

Хочу в скрипте сделать проверку монет, и сравнение с коинмаркет, если монетка есть на коинмаркет , добавить на нее ссылку.

Есть код

  $string = file_get_contents("name.txt");

$obj = json_decode( $string, true);
echo ($obj['data'][0]["website_slug"]);

Данный код выведет мне значение [website_slug] => bitcoin

Но вся проблема в том что для поиска и сравнения у меня есть только строка BTC .

Array
(
[data] => Array
(
[0] => Array
(
[id] => 1
[name] => Bitcoin
[symbol] => BTC
[website_slug] => bitcoin
)

В общем, как получить данные из [data] => Array имея только значение BTC.

Возможно ли это?

на картинке с права есть ссылки, они выделены желтым, но ссылка выводит только короткое название монеты.

https://coinmarketcap.com/currencies/EKO/

А правильно будет https://coinmarketcap.com/currencies/echolink

jpg 999999999999999999999999999999999.jpg
webiumpro
На сайте с 20.03.2017
Offline
38
#1
seosniks:
Цитата:
Array
(
[data] => Array
(
[0] => Array
(
[id] => 1
[name] => Bitcoin
[symbol] => BTC
[website_slug] => bitcoin
)

У вас же BTC в этом массиве есть. Что мешает сделать перебор?


foreach($obj['data'] as $item) {
if ($item['symbol'] == 'BTC') {
$link = 'https://coinmarketcap.com/currencies/'.$item['website_slug'] ;
break;
}
}

Или я что-то не так понял?

Копирование лендингов. Разработка на фреймворке сервисов. Создание сайтов (/ru/forum/994418)
seosniks
На сайте с 13.08.2007
Offline
379
#2
webiumpro:
У вас же BTC в этом массиве есть. Что мешает сделать перебор?


foreach($obj['data'] as $item) {
if ($item['symbol'] == 'BTC') {
$link = 'https://coinmarketcap.com/currencies/'.$item['website_slug'] ;
break;
}
}


Или я что-то не так понял?

Да все верно, просто хотелось обойтись без вложенных циклов.

У меня уже один основной цикл обрабатывает файловую базу.

Я сделал поиск совпадений с помощью strpos, правда кривовато находит. попадают лишние символы.

if (strpos(file_get_contents("coinmarket/coin_name.txt"), "BTC"))

Но проблема именно в том что мне нужно получить "website_slug": "bitcoin"

Получается ищем в файле совпадение BTC, далее выдергиваем нужные значения.

Но похоже без перебора не получится.

Хотя можно попробовать выбрать регулярками. Первую регулярку на совпадение

Второй выбрать все что нужно.

Сейчас попбробую регулярками выбрать.

seosniks
На сайте с 13.08.2007
Offline
379
#3

В общем создал масив ключ => значение и теперь все работает.

Жаль не вышло выпарсить все это из json.

$array = array ('BTC' => 'bitcoin', 'LTC' => 'litecoin', 'NMC' => 'namecoin'):
$z = $array["$coin"];
$link = $array_coinmarket["BTC"];
webiumpro
На сайте с 20.03.2017
Offline
38
#4

Без перебора тоже можно, функциями поиска в массиве. Правда, не уверен, что под капотом этих функций не используется перебор)


$key = array_search('BTC', array_column($obj['data'], 'symbol'));
$link = 'https://coinmarketcap.com/currencies/'.$obj['data'][$key]['website_slug'];
seosniks
На сайте с 13.08.2007
Offline
379
#5
webiumpro:
Без перебора тоже можно, функциями поиска в массиве. Правда, не уверен, что под капотом этих функций не используется перебор)


$key = array_search('BTC', array_column($obj['data'], 'symbol'));
$link = 'https://coinmarketcap.com/currencies/'.$obj['data'][$key]['website_slug'];

Все сделал уже,

сделал файлик, обновляется перезаписью кнопкой.

подключаю его.

  include("coinmarket/coin.php");

Дальше обработка

$znak =  $array_coinmarket["$coin"];

$key = array_search ($znak , $array_coinmarket);
#Выводим информацию о монетке с коинмаркет кап, если равно $key === $coin.
if ( $key === $coin)
{ $znak = "<a target=_blank href=https://coinmarketcap.com/currencies/$znak/> <span style=\"background-color:yellow\"> <big> $coin </big> </span></a>";
} else { $znak = '';}

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий