Перебирайте XML и только "смотрите" на конкретный идентификатор
В моей базе данных MySQL есть несколько строк, каждая из которых содержит идентификатор элемента. То, что я хотел бы сделать, это обновить каждый из столбцов "placidRate" для того, что содержится в документе XML очень большого URL ниже. Например, для typeID 1230, он должен найти скорость 1230 в моей базе данных и сравнить ее со скоростью $type->sell->min
, Это конечная цель. Прямо сейчас все, что я ищу, это повторяет старый курс (дБ) и новый курс (xml) рядом друг с другом.
while($row = mysql_fetch_assoc($result)){
$oldTypeID = $row['typeID'];
$urlPlacid = 'http://api.eve-central.com/api/marketstat?typeid=1230&typeid=17470&typeid=17471&typeid=1228&typeid=17463&typeid=17464&typeid=1224&typeid=17459&typeid=18&typeid=17455&typeid=17456&typeid=1227&typeid=17867&typeid=17868&typeid=20&typeid=17452&typeid=17453&typeid=1226&typeid=17448&typeid=17449&typeid=1231&typeid=17444&typeid=17445&typeid=21&typeid=17440&typeid=17441&typeid=1229&typeid=17865&typeid=17866&typeid=1232&typeid=17436&typeid=17437&typeid=19&typeid=17466&typeid=17467&typeid=1225&typeid=17432&typeid=17433&typeid=1223&typeid=17428&typeid=17429&typeid=22&typeid=17425&typeid=17426&typeid=11396&typeid=17869&typeid=17870&typeid=34&typeid=35&typeid=36&typeid=37&typeid=38&typeid=40&typeid=39&typeid=11399®ionlimit=10000048';
$xmlPlacid = simplexml_load_file($urlPlacid);
foreach($xmlPlacid->marketstat->type as $type){
$newRate = $type->sell->min;
if($type[id] = $oldTypeID){
echo "old placid rate: ".$row['placidRate']." || new placid rate: ".$newRate;
}
else{}
Проблема с этим кодом в том, что он возвращает
старый спокойный курс: 14,5 || новый спокойный курс: 12.00 старый спокойный курс: 14.5 || новый спокойный курс: 25.00 старый спокойный курс: 14.5 || новый спокойный курс: 17.00 старый спокойный курс: 14.5 || новый уровень спокойствия: 25,21 градус спокойный темп: 14,5 || новый спокойный курс: 22.01 старый спокойный курс: 14.5 || новая спокойная ставка: 30,00 спокойная спокойная скорость: 14,5 || новый безмятежный темп: 0,00 кратный безмятежный темп: 14,5 || новый безмятежный темп: 0,00 кратный безмятежный темп: 14,5 || новый спокойный курс: 55.00 спокойный спокойный курс: 14.5 || новый спокойный курс: 80.00 старый спокойный курс: 14.5 || новый спокойный курс: 85.00 старый спокойный курс: 14.5 || новый спокойный курс: 94.00 старый спокойный курс: 14.5 || новый спокойный курс: 90.00 старый спокойный курс: 14.5 || новый спокойный курс: 120.00 старый спокойный курс: 14.5 || новый безмятежный темп: 0,00 кратный безмятежный темп: 14,5 || новый спокойный курс: 290.00 старый спокойный курс: 14.5 || новый безмятежный темп: 0,00 кратный безмятежный темп: 14,5 || новый безмятежный темп: 0,00 кратный безмятежный темп: 14,5 || новый безмятежный темп: 0,00 кратный безмятежный темп: 14,5 || новый безмятежный темп: 0,00 кратный безмятежный темп: 14,5 || новый спокойный курс: 1087.06 старый спокойный курс: 14.5 || новый безмятежный темп: 0,00 кратный безмятежный темп: 14,5 || новый безмятежный темп: 0,00 кратный безмятежный темп: 14,5 || новый безмятежный темп: 0,00 кратный безмятежный темп: 14,5 || новый безмятежный темп: 0,00 кратный безмятежный темп: 14,5 || новый безмятежный темп: 0,00 кратный безмятежный темп: 14,5 || новый безмятежный темп: 0,00 кратный безмятежный темп: 14,5 || новый безмятежный темп: 0,00 кратный безмятежный темп: 14,5 || новый безмятежный темп: 0,00 кратный безмятежный темп: 14,5 || новый безмятежный темп: 0,00 кратный безмятежный темп: 14,5 || новый безмятежный темп: 0,00 кратный безмятежный темп: 14,5 || новый безмятежный темп: 0,00 кратный безмятежный темп: 14,5 || новый безмятежный темп: 0,00 кратный безмятежный темп: 14,5 || новый безмятежный темп: 0,00 кратный безмятежный темп: 14,5 || новый безмятежный темп: 0,00 кратный безмятежный темп: 14,5 || новый безмятежный темп: 0,00 безмятежный темп: 14,5 || новый безмятежный темп: 0,00 кратный безмятежный темп: 14,5 || новый безмятежный темп: 0,00 кратный безмятежный темп: 14,5 || новый безмятежный темп: 0,00 кратный безмятежный темп: 14,5 || новый безмятежный темп: 0,00 кратный безмятежный темп: 14,5 || новый безмятежный темп: 0,00 кратный безмятежный темп: 14,5 || новый безмятежный темп: 0,00 кратный безмятежный темп: 14,5 || новый безмятежный темп: 0,00 кратный безмятежный темп: 14,5 || новый безмятежный темп: 0,00 кратный безмятежный темп: 14,5 || новый безмятежный темп: 0,00 кратный безмятежный темп: 14,5 || новый безмятежный темп: 0,00 кратный безмятежный темп: 14,5 || новый безмятежный темп: 0,00 кратный безмятежный темп: 14,5 || новый спокойный курс: 4.00old спокойный курс: 14.5 || новый спокойный курс: 10.00 старый спокойный курс: 14.5 || новый спокойный курс: 40.00 старый спокойный курс: 14.5 || новый спокойный курс: 143,00; старый спокойный курс: 14,5 || новый спокойный курс: 819.00стандартный спокойный курс: 14.5 || новый спокойный курс: 2599,00; старый спокойный курс: 14,5 || новый спокойный курс: 770.00 старый спокойный курс: 14.5 || новый спокойный курс: 0,00
И я не совсем уверен, почему...
На шаг ближе к обновлению таблицы SQL. отредактировано еще раз
$market = new eveCentral();
while($row = mysql_fetch_assoc($result2)){
$oldTypeID = $row['typeID'];
$oldRate = $row['placidRate'];
$newPlacidRate = $market->placidMin($oldTypeID);
$newForgeRate = $market->forgeMin($oldTypeID);
$newUniverseRate = $market->universeMin($oldTypeID);
$updateQuery = "UPDATE itemRates SET placidRate = $newPlacidRate, forgeRate = $newForgeRate, universeRate = $newUniverseRate WHERE typeID = $oldTypeID";
3 ответа
Помимо проблемы с неправильным оператором в if
Для сравнения (как обрисовал @GBD) у вас есть несколько проблем:
- Вы извлекаете XML из eve-central.com для каждой строки результатов базы данных. Но XML не меняется. Переместить его над базой данных
while
запрос. - Ответив @Alex, используйте xpath, чтобы найти элемент с идентификатором, который вы ищете.
Вид сверху:
$marketstat = new EveCentralMarketstat();
while ($row = mysql_fetch_assoc($result)) {
$oldTypeID = $row['typeID'];
$oldRate = $row['placidRate'];
$newRate = $marketstat->getSellMinByType($oldTypeID);
if (FALSE !== $newRate) {
echo "old placid rate: " . $oldRate . " || new placid rate: " . $newRate;
}
}
Определение для EveCentralMarketstat
учебный класс:
Добавьте функции, которые вам нужны для большего доступа к данным, и конструктор может быть улучшен в зависимости от того, какая информация вам нужна, просто краткое описание того, как вы можете улучшить.
/**
* Wrapper Class for Even Central API Market Statistics
*/
class EveCentralMarketstat
{
/**
* @var SimpleXMLElement
*/
private $xml;
public function __construct() {
$urlPlacid = 'http://api.eve-central.com/api/marketstat?typeid=1230&typeid=17470&typeid=17471&typeid=1228&typeid=17463&typeid=17464&typeid=1224&typeid=17459&typeid=18&typeid=17455&typeid=17456&typeid=1227&typeid=17867&typeid=17868&typeid=20&typeid=17452&typeid=17453&typeid=1226&typeid=17448&typeid=17449&typeid=1231&typeid=17444&typeid=17445&typeid=21&typeid=17440&typeid=17441&typeid=1229&typeid=17865&typeid=17866&typeid=1232&typeid=17436&typeid=17437&typeid=19&typeid=17466&typeid=17467&typeid=1225&typeid=17432&typeid=17433&typeid=1223&typeid=17428&typeid=17429&typeid=22&typeid=17425&typeid=17426&typeid=11396&typeid=17869&typeid=17870&typeid=34&typeid=35&typeid=36&typeid=37&typeid=38&typeid=40&typeid=39&typeid=11399®ionlimit=10000048';
$this->xml = simplexml_load_file($urlPlacid);
}
/**
* @param $typeID
* @return bool|string String value if $typeID is found, FALSE on error
*/
public function getSellMinByType($typeID) {
$result = $this->xml->xpath("/*/marketstat/type[@id = '$typeID']/sell/min");
if (!$result) {
return FALSE;
}
return (string)$result[0];
}
}
Вы пропустили ==
равен оператору в IF
if($type['id'] == $oldTypeID){
...
}
Если вы ищете узел по идентификатору, просто используйте xpath$node = $xmlPlacid->xpath("//*[@id='foo']");