背景:我是一名新手程序员,可能缺乏完整的360度能力来提出正确的问题。
问题:
我有一个数组$sortablepast
:
array(3) {
[0]=> object(SimpleXMLElement)#265 (6) {
["Date"]=> string(25) "2014-12-28T08:15:00-08:00"
["Id"]=> string(5) "78065"
["HomeTeam"]=> string(7) "Man Utd"
["AwayTeam"]=> string(9) "Leicester"
["HomeGoals"]=> string(1) "2"
["AwayGoals"]=> string(1) "2"
}
[1]=> object(SimpleXMLElement)#264 (6) {
["Date"]=> string(25) "2014-12-28T08:15:00-08:00"
["Id"]=> string(5) "78064"
["HomeTeam"]=> string(8) "Man City"
["AwayTeam"]=> string(7) "Burnley"
["HomeGoals"]=> string(1) "3"
["AwayGoals"]=> string(1) "3"
}
[2]=> object(SimpleXMLElement)#266 (6) {
["Date"]=> string(25) "2014-12-28T08:15:00-08:00"
["Id"]=> string(5) "78085"
["HomeTeam"]=> string(9) "Newcastle"
["AwayTeam"]=> string(7) "Everton"
["HomeGoals"]=> string(1) "1"
["AwayGoals"]=> string(1) "1"
}
}
这是使用以下函数将SimpleXMLobject转换为数组的结果:
<?php $xmlpast = new SimpleXMLElement("xml_past_epl.xml", 0, TRUE);
$sortablepast = array();
foreach($xmlpast->Match as $node) {
$sortablepast[] = $node;
}
?>
我已将其转换为数组,以便使用usort按字母顺序对其进行排序。
我正在尝试运行if语句,以便在"HomeTeam" = "Man Utd"
时它将回显"Man Utd are at home"
。
从“如何在多维数组中搜索键值对”这一问题的许多答案(包括我提出的问题)我尝试使用in_array
,issset
, array_map
,array_filter
来自SO的答案,但似乎都没有效果。我似乎能够访问key = '0', '1' or '2'
而不是key = 'Date, 'Id'
等
我想问一下 a)这是一个多维数组,还是实际上是一个对象数组?我没有足够的知识和经验来了解差异是否显着 b)如果它不是一个多维数组,我是否需要以某种方式转换它,或者有一种搜索特定键值对的方法(HomeTeam-&gt; Man Utd)?
我可以提供许多我尝试过但没有效果的例子,但我认为最好首先询问数组中是否存在我误解的内容。
答案 0 :(得分:2)
每个人似乎都跳上了“这不是一个多维数组”。潮流。
但这正是你所要求的,所以我会尽力回答你的问题:
a)这是一个多维数组,还是实际上是一个对象数组?我没有足够的知识和经验来了解差异是否显着
正如您所注意到的,它实际上是一个对象数组。你可以看到这个因为
array(3) {
[0]=> object(SimpleXMLElement)#265 (6) {
....
}
本来是
array(3) {
[0]=> array(6) {
....
}
如果XMLObject也被转换为数组,那么它将是一个多维数组。
为什么它是带对象的数组? 因为你还没有自己转换节点。 这就是你要做的:
$sortablepast = array();
foreach($xmlpast->Match as $node) {
$sortablepast[] = $node; // $node is not an array, all nodes within the XML are also SimpleXMLElements
}
差异是否显着?
是的,但是您不需要在匹配中订购或做任何特殊事情,因此也不需要将其转换为数组。所以你只需要在SimpleXMLElement上进行正确的操作(见下文)。
b)如果它不是多维数组,我是否需要以某种方式对其进行转换,或者有一种搜索特定键值对的方法(HomeTeam-&gt; Man Utd)?强>
无需您仍然可以阅读SimpleXMLElement
。
例如:
foreach ($sortablepast as $match) {
//$match is a SimpleXMLElement
if ($match->HomeTeam == 'Man Utd') {
echo 'Man Utd are at home';
}
}
如何排序:
//Sort by HomeTeam alphabetically
usort($sortablepast, function($a, $b)
{
if ($a->HomeTeam == $b->HomeTeam) {
return 0;
}
return ($a->HomeTeam < $b->HomeTeam) ? -1 : 1;
});
答案 1 :(得分:0)
这不是多维数组。它是对象的单维数组。
你有三个元素的数组,其中每个元素都是SimpleXMLElement
类的对象。
echo $array[2]->HomeTeam;
echo $array[1]->Id;
等
我希望Reference (click!)会帮助你
答案 2 :(得分:0)
看起来你有一个对象数组而不是多维数组。数组大小为3,请参见第一行代码。