按 XML 给出的日期对 table 进行排序

usort table by date given by XML

我的问题是,我更改了有价值的日期

$date

成一个数组,叫做

$sortDate

现在,我想获取数组,并按日期对它进行排序。我的排序函数如下所示。

   function sortArray($data, $field) {
        if (!is_array($field))
            $field = array($field);
        usort($data, function($a, $b) use($field) {
            $retval = 0;
            foreach ($field as $fieldname) {
                if ($retval == 0)
                    $retval = strnatcmp($a[$fieldname], $b[$fieldname]);
            }
            return $retval;
        });
        return array_reverse($data);
    }

现在,这是我在开头谈到的贵重物品的定义。

$xml = simplexml_load_file('http://www.hokejbal.cz/xml/2017-2018/shedules/227.xml');

    foreach ($xml->SKUPINA as $skupina) {
        if ($skupina['id_sku'] != 1613)
            continue;
        foreach ($skupina->UTKANI as $utkani) {
            $away = $utkani->AWAY;
            $date = new DateTime($utkani->DATUM);
            $sortDate = array();
            $sortDate[] = $utkani->DATUM;
            print_r($sortDate); //this is just control line, yes, it is array.

现在,我想对日期进行排序...所以我这样写

        foreach ($utkani->DATUM as $item) {
                $sortDate[] = array(
                    'datum' => $item->DATUM
                );
            }
            if (isset($sortDate)) {
                $sortDate = sortArray($sortDate, array('datum'));

所以,现在我到了,元素在我眼里应该按$date排序的时候了,所以我准备写这样的东西

<tr>    
<td nowrap><?=$sortDate->format ('m.d.y') ; ?></td>
</tr>   

但在这一点上,我只收到错误调用...

Fatal error: Uncaught Error: Call to a member function format() on array in C:\xampp\htdocs\SKKelti2008\Tabulky_rozpisy_statistiky\A\page-rozpis-1718.php:62 Stack trace: #0 {main} thrown in
C:\xampp\htdocs\SKKelti2008\Tabulky_rozpisy_statistiky\A\page-rozpis-1718.php on line 62

最后,这只是我的完整代码,因此您可以了解 table 发生了什么。这对解决问题并不重要,但它可以提供帮助。

    <div id="primary" class="content-area">
            <div id="content" class="site-content" role="main">
<div class="svazTabulky">
<TABLE>
    <TR>
        <th colspan="9">1. Národní hokejbalová liga 2017/2018</th>
    </TR>
  <TR>
    <TD nowrap>DATUM</TD>
    <TD nowrap>ČAS</TD>
    <TD nowrap>MÍSTO</TD>
    <TD nowrap>DOMÁCÍ</TD>
    <TD nowrap>HOSTÉ</TD>
    <TD nowrap>Výsledek</TD>

  </tr>        
        <?php
             function sortArray($data, $field) {
            if (!is_array($field))
                $field = array($field);
            usort($data, function($a, $b) use($field) {
                $retval = 0;
                foreach ($field as $fieldname) {
                    if ($retval == 0)
                        $retval = strnatcmp($a[$fieldname], $b[$fieldname]);
                }
                return $retval;
            });
            return array_reverse($data);
        }

        // put your code here

    $xml = simplexml_load_file('http://www.hokejbal.cz/xml/2017-2018/shedules/227.xml');

        foreach ($xml->SKUPINA as $skupina) {
            if ($skupina['id_sku'] != 1613)
                continue;
            foreach ($skupina->UTKANI as $utkani) {
                $away = $utkani->AWAY;
                $date = new DateTime($utkani->DATUM);
                $sortDate = array();


                 foreach ($utkani->DATUM as $item) {
                    $sortDate[] = array(
                        'datum' => $item->DATUM
                    );
                }
                if (isset($sortDate)) {
                    $sortDate = sortArray($sortDate, array('datum'));
                    print_r($sortDate);

                    foreach ($utkani->HOME as $home) {
               if ($home['kod_cmshb']!=3202007 and $away['kod_cmshb']!=3202007)               continue; 

            ?>
              <tr <?php if($utkani['kod_cmshb']==3202007){ ?> class="beroun" <?php } ?>>
                <td nowrap><?=$sortDate->format ('m.d.y') ; ?></td>
                <td nowrap><?=$utkani->CAS ?></td>
                <td nowrap><?=$utkani->MISTO ?></td>
                <td nowrap><?=$utkani->HOME ?></td>
                <td nowrap><?=$utkani->AWAY ?></td>
                <td nowrap><?=$utkani->GH ?>:<?=$utkani->GA ?></td>
              </tr>        
            <?php
                } 
        }
        }

        break;
    }

?>
</TABLE>
    <p>Data převzata z <a href="http://hokejbal.cz"> hokejbal.cz</a></p> 
</div>
            </div><!-- #content .site-content -->
        </div><!-- #primary .content-area -->

<?php get_sidebar(); ?>
<?php get_footer(); ?>
}

}
}

如果你运行:

var_dump($sortDate);

这将导致:

array(1) {
  [0]=>
  array(1) {
    ["datum"]=>
    object(SimpleXMLElement)#7 (0) {
    }
  }
}

在那种情况下,$sortDate->format ('m.d.y') 将不起作用,因为您想 运行 数组上的 format 方法。

您声明了一个 $date 变量,但您没有在此代码中使用它。

$date = new DateTime($utkani->DATUM);

也许您正在寻找 $date->format ('m.d.y') ;