PHP -

2011-11-10 3 views
3

私は配列そうように持って指定された後に、配列のすべての要素を削除する方法:PHP -

アレイ([740073] => Leetee猫1 [720102] =>猫1 SUBCAT 1 [730106 ] => subsubcat [740107] =>別[730109] =>テスト猫)

私は '720102' のキーを持つ要素の後に来る配列のすべての要素を削除します。だから、配列にはなるだろう:

アレイ([740073] => Leetee猫1 [720102] =>猫1 SUBCAT 1)

私はこれをどのように実現するのでしょうか?私はこれまでのところ腹筋しか持っていません...

foreach ($category as $cat_id => $cat){ 
    if ($cat_id == $cat_parent_id){ 
    //remove this element in array and all elements that come after it 
    } 
} 

[編集]第1の答えは、ほとんどの場合ではあるがすべてではないようです。元の配列に2つの項目しかない場合は、最初の要素だけが削除されますが、後の要素は削除されません。 2つだけの要素

がある場合にアレイ([740073] => Leetee猫1 [740102] =>猫1 SUBCAT 1)

アレイ([740073]となります=> [740102] => cat 1 subcat 1)

これはなぜですか?あり、これを達成するにはいくつかの方法がありますが、フラグが設定されている場合、あなたの現在の構造を使用すると、あなたがフラグを設定し、削除することができ、この

$newcats = array(); 
foreach($category as $cat_id => $cat) 
{ 
    if($cat_id == $cat_parent_id) 
     break; 

    $newcats[$cat_id] = $cat; 
} 

$category = $newcats; 

答えて

7

個人的に、私はarray_keysarray_search、およびarray_spliceを使用します。 array_keysを使用してキーのリストを取得すると、すべてのキーが0のキーで始まる配列の値として取得されます。 array_searchを使用して、元の配列内のキーの位置になるキーのキーを見つけます(意味がある場合)。最後にarray_spliceを使用して、その位置の後にある配列値を削除します。

PHP:

$categories = array(
    740073 => 'Leetee Cat 1', 
    720102 => 'cat 1 subcat 1', 
    730106 => 'subsubcat', 
    740107 => 'and another', 
    730109 => 'test cat' 
); 

// Find the position of the key you're looking for. 
$position = array_search(720102, array_keys($categories)); 

// If a position is found, splice the array. 
if ($position !== false) { 
    array_splice($categories, ($position + 1)); 
} 

var_dump($categories); 

出力:

array(2) { 
    [0]=> 
    string(12) "Leetee Cat 1" 
    [1]=> 
    string(14) "cat 1 subcat 1" 
} 
+0

これはほとんどの場合に機能するようですが、すべてではないようです。動作しないものの例を示す元のメッセージへの編集を参照してください。 – LeeTee

+0

OK、awnswerは正しかったが、$ position = 0なら問題があった。if($ position)ではなく$ position!== FALSEと書く必要がある。ありがとう – LeeTee

+0

それについて申し訳ありません。それは完璧な意味合いがあります。 ;)私は上記の答えを修正します。 –

-1

ある時はいつでもあると思われます...

$delete = false; 
foreach($category as $cat_id => $cat){ 
    if($cat_id == $cat_parent_id || $delete){ 
     unset($category[$cat_id]); 
     $delete = true; 
    } 
} 
+0

うん、それは番目のemostは、論理思えるように私はこの方法を試してみましたが、それはいくつかの理由のために働くdoes notの.... – LeeTee