Php 数组中每年的分数
我对PHP还很陌生,我正在努力实现一些东西,在我看来,这在c#中很容易实现。然而,在PHP中,这对我来说并不容易实现 在迭代XML文件时,我希望存储每年的所有平均分数。 年份将是独一无二的,分数应该是他们的价值观 输出应如下所示: ['2012']=>数组(8.1,7.3,8.8)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
['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);
}
}
}