2012-03-23 17 views
0

私の配列は次のようになります。私は、特定の名前を持つチームを削除できるようにしたい多次元配列の親要素を削除しますか?

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.

+0

どのように配列を生成していますか?後でそれをフィルタリングするのではなく、「チームA」ではないすべてのチームを取得する方が簡単かもしれません。 –

+0

XML、基本的にチームの値を更新したいのですが、最後に新しいアレイをプッシュして、古いもの。 – BluffTrout

答えて

0

私自身は、カウントしてforループを使用する代わりに、常にforeachループを使用します。ちょうど私の好み。また、以前の回答の1つでは、array_spliceを使用することをお勧めしましたが、ここでunsetがうまく機能します - 削除されたチームを新しい配列に配置したい場合を除き、通常はarray_spliceを使用します。私は信じられないでしょう。

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

完璧!ありがとう:) – BluffTrout

+0

'foreach($ .. as $ k => $ v)'でより簡単で安定しています。 – VolkerK

+0

@VolkerK、「より簡単で安定した」という意味は?それはなぜより安定しているのですか?とにかく '$ i'が必要だと考えると、なぜ簡単でしょうか?このような場合にforeachを避ける傾向があります。なぜなら、 '$ team'を解除しようとする可能性があるからです。これはうまくいきません。 – bfavaretto

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]); 
    } 
} 
+0

働いていませんが、私はあなたが意味することを理解しています。 – BluffTrout

+0

申し訳ありません、ループ内でキー「チーム」を使用するのを忘れていました。回答が更新されました。私は 'array_splice'の代わりに' unset'を使って別のオプションを追加しました。 – bfavaretto

+0

なぜforループが両方ともクラッシュしている理由は分かりません – BluffTrout

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>