删除多维数组的父元素?

时间:2012-03-23 13:31:07

标签: php multidimensional-array

My 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 ) ) )

我希望能够删除一个具有特定名称的团队,比如A队。

3 个答案:

答案 0 :(得分:0)

您必须按索引向后循环数组,直到找到目标团队名称,然后使用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]);
    }
}

答案 1 :(得分:0)

我,我总是喜欢使用foreach循环而不是计数和使用for循环。只是我的偏好。另外,在之前的一个答案中,建议使用array_splice,但是unset在这里工作得更好 - 除非您想要将删除的团队放入一个新的数组,这是您通常使用的array_splice。我相信,未设置会节省一些记忆。

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

答案 2 :(得分:0)

“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>