上下文:我是一个新手程序员,可能缺乏完整的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"
}
}
这是使用以下命令将 SimpleXML对象转换为数组的结果:
<?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) 如果它不是一个多维数组,我是否需要以某种方式转换它,或者有一种方法可以搜索特定的键值对(主场球队->曼联)?
我可以举出很多我尝试过但没有奏效的例子,但我认为最好先问一下数组中是否有我误解的东西。
每个人似乎都加入了"这不是一个多维数组"的潮流。
但这正是你问的,所以我会尝试回答你的问题:
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) 如果它不是一个多维数组,我是否需要以某种方式转换它,或者有一种方法可以搜索它以查找特定的键值对(主场球队->曼联)?
无需您仍然可以阅读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;
});
一个多维数组。它是对象的一维数组。
你有包含三个元素的数组,其中每个元素都是SimpleXMLElement
类的对象。
echo $array[2]->HomeTeam;
echo $array[1]->Id;
等。
我希望参考(点击!)对您有所帮助
你有一个对象数组,而不是一个多维数组。 数组大小为 3,请参阅第一行代码。