Php 数组中每年的分数

Php 数组中每年的分数,php,arrays,Php,Arrays,我对PHP还很陌生,我正在努力实现一些东西,在我看来,这在c#中很容易实现。然而,在PHP中,这对我来说并不容易实现 在迭代XML文件时,我希望存储每年的所有平均分数。 年份将是独一无二的,分数应该是他们的价值观 输出应如下所示: ['2012']=>数组(8.1,7.3,8.8) ['2013']=>阵列(6.7,7.7,5.5) ['2014']=>阵列(2.3,7.9,9.9) 这样我就可以得到2014年的所有平均分数,等等。 在c#中,我会创建一个包含如下列表的词典: var yearS

我对PHP还很陌生,我正在努力实现一些东西,在我看来,这在c#中很容易实现。然而,在PHP中,这对我来说并不容易实现

在迭代XML文件时,我希望存储每年的所有平均分数。 年份将是独一无二的,分数应该是他们的价值观

输出应如下所示:

['2012']=>数组(8.1,7.3,8.8)
['2013']=>阵列(6.7,7.7,5.5)
['2014']=>阵列(2.3,7.9,9.9)

这样我就可以得到2014年的所有平均分数,等等。 在c#中,我会创建一个包含如下列表的词典:

var yearScores = new Dictionary<string, List<Decimal>>();

如何将分数添加到$yearScores数组中的正确年份数组中?

您可以按如下操作:

// no need to initialize multidimensional array here
$yearScores = array();

foreach($xml->results->children() as $result) {

    foreach($result->children() as $answer) {
        //Retrieve Date and Average
        // This here does not look right to me
        if($average[0]['name'] == "date") {
            $current_date = date('Y', strtotime($answer));
        }
        if($average[0]['name'] == "average") {
            $current_average = $answer;
        }

        if(!isset($yearScores[$current_date])) {
            $yearScores[$current_date] = array($current_average);
        } else {
            array_push($yearScores[$current_date], $current_average);
        }
    }
}

但是,我不确定
if
s(查看我的评论)。你检查过他们的输出是否正确吗?

你能把
$xml->results->children()
的结果打印出来吗?我之前简化了代码,现在添加了完整的代码以便更好地理解。将添加XML提要;打印($xml->results->children());死亡在foreach之前的代码中,并通过将数组放入代码中向我们显示该数组。简单且更有用。谢谢。您从哪里获得
$year
变量的?它应该是
$current\u date
?它是
$current\u date
;更改代码之前是
$year
。在示例中应该是“当前日期”而不是“年”。@user3584460我在您的代码中添加了一项内容,$current\u average现在是一个simplexmlement。将其转换为字符串可以得到我想要的确切值。所以:
$yearScores[$current\u date]=array($current\u average)将变成:
$yearScores[$current\u date]=数组((字符串)$current\u average)
数组推送($yearScores[$current\u date],$current\u average)将变成:
array\u push($yearScores[$current\u date],(string)$current\u average)
@Max因为它是一个SimpleXMLElement,所以您可以执行
$current\u average->\uu toString()
$current_average->_toString()而不是将其转换为字符串(我甚至不知道这是可能的:))。
// no need to initialize multidimensional array here
$yearScores = array();

foreach($xml->results->children() as $result) {

    foreach($result->children() as $answer) {
        //Retrieve Date and Average
        // This here does not look right to me
        if($average[0]['name'] == "date") {
            $current_date = date('Y', strtotime($answer));
        }
        if($average[0]['name'] == "average") {
            $current_average = $answer;
        }

        if(!isset($yearScores[$current_date])) {
            $yearScores[$current_date] = array($current_average);
        } else {
            array_push($yearScores[$current_date], $current_average);
        }
    }
}