0

在我的 mysql 数据库中,我有几行,每行都包含一个项目 ID。我想做的是为下面非常大的 URL 的 XML 文档中包含的内容更新每个“placidRate”列。例如,对于 typeID 1230,它应该在我的数据库中找到 1230 的速率并将其与$type->sell->min. 这就是最终目标。现在我正在寻找它做的就是将旧速率(db)和新速率(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&regionlimit=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.00旧平静率: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 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.00旧平静率: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 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.00旧平静率: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 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.00旧平静率: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 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.00旧平静率: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 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.00旧平静率: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 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.00旧平静率: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 5 || 新平静率:0.00旧平静率:14.5 || 新平静率:0.00旧平静率:14.5 || 新平静率:0.00旧平静率:14.5 || 新平静率:0.00旧平静率:14.5 || 新平静率:0.00旧平静率:14.5 || 新平静率:4.00旧平静率: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 5 || 新平静率:0.00旧平静率:14.5 || 新平静率:0.00旧平静率:14.5 || 新平静率:0.00旧平静率:14.5 || 新平静率:0.00旧平静率:14.5 || 新平静率:0.00旧平静率:14.5 || 新平静率:4.00旧平静率: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 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 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";
4

3 回答 3

1

如果您要按 ID 查找节点,只需使用 xpath
$node = $xmlPlacid->xpath("//*[@id='foo']");

于 2013-01-02T15:55:46.607 回答
1

你错过了==等于运算符IF

if($type['id'] == $oldTypeID){
...
}
于 2013-01-02T15:57:39.093 回答
1

除了if比较中操作符错误的问题(正如@GBD 所概述的那样),这里还有一些问题:

  1. 您正在从 eve-central.com 获取每个数据库结果行的 XML 。但是 XML 没有改变。将其移至数据库查询上方。while
  2. 正如@Alex 回答的那样,使用 xpath 找到具有您要查找的 ID 的项目。

俯视图:

$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&regionlimit=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];
    }
}
于 2013-01-02T17:21:38.347 回答