我有一个像这样的数组:
数组([740073] => Leetee Cat 1 [720102] => cat 1 subcat 1 [730106] => subsubcat [740107] =>另一个[730109] =>测试猫)
我想删除元素之后使用'720102'键的所有元素元素。因此数组将成为:
数组([740073] => Leetee Cat 1 [720102] => cat 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
}
}
[编辑]第一个答案似乎适用于大多数情况但不是全部。如果原始数组中只有两个项,则只删除第一个元素,但不删除后面的元素。如果只有两个元素
数组([740073] => Leetee Cat 1 [740102] => cat 1 subcat 1)
成为
数组([740073] => [740102] => cat 1 subcat 1)
这是为什么?似乎每当$ position为0时。
答案 0 :(得分:7)
就个人而言,我会使用array_keys
,array_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"
}
答案 1 :(得分:-1)
试试这个
$newcats = array();
foreach($category as $cat_id => $cat)
{
if($cat_id == $cat_parent_id)
break;
$newcats[$cat_id] = $cat;
}
$category = $newcats;
答案 2 :(得分:-1)
有几种方法可以实现这一点,但使用您当前的结构,您可以设置一个标志并删除标志是否设置...
$delete = false;
foreach($category as $cat_id => $cat){
if($cat_id == $cat_parent_id || $delete){
unset($category[$cat_id]);
$delete = true;
}
}