删除多维数组的父元素


Remove parent element of a multidimensional array?

我的数组如下所示:

    Array ( 
      [Team] => Array ( 
        [0] => Array ( 
          [Name] => Team A [Played] => 0 [Wins] => 0 [Draws] => 0 [Losses] => 0 [Gd] => 0 [Points] => 0 ) 
        [1] => Array ( 
          [Name] => Team B [Played] => 0 [Wins] => 0 [Draws] => 0 [Losses] => 0 [Gd] => 0 [Points] => 0 ) ) )

我希望能够删除具有特定名称的团队,例如team a.

我自己总是喜欢使用foreach循环,而不是计数和使用for循环。只是我的喜好。此外,在之前的一个答案中,建议使用array_splice,但unset在这里效果更好——除非您想将删除的团队放入新的阵列中,而这正是您通常使用array_splice的目的。我相信,Unset可以保存一些记忆。

$remove = 'Team A';    
foreach ($teams['Team'] as $key => $team) {
    if($team['Name'] == $remove){
       unset($teams['Team'][$key]);
    }        
}

您必须通过索引反向循环数组,直到找到目标团队名称,然后使用array_splice删除父级:

$lastIndex = count($arr['Team'])-1;
for($i=$lastIndex; $i>=0; $i--) {
    if($arr['Team'][$i]['Name'] == 'Team A') {
        array_splice($arr['Team'], $i, 1);
    }
}

您也可以使用unset:

$lastIndex = count($arr['Team'])-1;
for($i=$lastIndex; $i>=0; $i--) {
    if($arr['Team'][$i]['Name'] == 'Team A') {
        unset($arr['Team'][$i]);
    }
}

"XML,基本上我想更新团队值,但发现将新数组推到末尾更容易,只想删除旧数组"-它可以像一样简单

<?php
$foo = new SimpleXMLElement(getData());
foreach( $foo->xpath('teams/team[@name="Team A"]') as $t) {
    $t->wins += 1;
}
echo $foo->asxml();

function getData() {
    return <<< eox
<foo>
    <teams>
        <team name="Team A">
            <played>0</played>
            <wins>0</wins>
            <draws>0</draws>
            <looses>0</looses>
        </team>
        <team name="Team B">
            <played>0</played>
            <wins>0</wins>
            <draws>0</draws>
            <looses>0</looses>
        </team>
    </teams>
</foo>  
eox;
}

打印

<?xml version="1.0"?>
<foo>
    <teams>
        <team name="Team A">
            <played>0</played>
            <wins>1</wins>
            <draws>0</draws>
            <looses>0</looses>
        </team>
        <team name="Team B">
            <played>0</played>
            <wins>0</wins>
            <draws>0</draws>
            <looses>0</looses>
        </team>
    </teams>
</foo>