【问题标题】:usort table by date given by XML按 XML 给出的日期排序表
【发布时间】:2017-11-01 22:02:22
【问题描述】:

我的问题是,我将日期从有价值的地方更改了

$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>   

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

致命错误:未捕获的错误:调用 C:\xampp\htdocs\SKKelti2008\Tabulky_rozpisy_statistiky\A\page-rozpis-1718.php:62 中的数组上的成员函数 format() 堆栈跟踪:#0 {main}投入
C:\xampp\htdocs\SKKelti2008\Tabulky_rozpisy_statistiky\A\page-rozpis-1718.php 在第 62 行

最后,这只是我的完整代码,因此您可以了解桌子的情况。这对于解决问题并不重要,但它可以提供帮助。

    <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(); ?>
}

}
}

【问题讨论】:

    标签: php arrays xml html-table usort


    【解决方案1】:

    如果你运行:

    var_dump($sortDate);

    这将导致:

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

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

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

    $date = new DateTime($utkani-&gt;DATUM);

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

    【讨论】:

    • 好吧,我使用 $sortDate 因为我不能在 $date 上使用函数 sortArray,因为 $date 不是数组 –
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-06
    • 2021-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    相关资源
    最近更新 更多