2013-05-11 27 views
2

好吧。我有这样定义的满阵:从php中删除数组中的元素

$subs = array(); 
for (...) { 
    // extracting of variables $knowledgeLevel, $name, $short, $long 
    $subs [] = array (
     'knowledgeLevel' => $knowledgeLevel, 
     'name' => $name, 
     'shortTheory' => $short, 
     'longTheory' => $long 
    ); 
} 

然后我收到了价值$kl,我想最终从阵列$subs具有knowledgeLevel等于$klelement删除。我试着这样做:

foreach ($subs as $subject) { 
    if ($subject['knowledgeLevel'] == $kl) { 
     unset ($subject); 
    } 
} 

foreach ($subs as $subject) { 
    if ($subject['knowledgeLevel'] == $kl) { 
     unset ($subject['knowledgeLevel']); 
     unset ($subject['name']); 
     unset ($subject['shortTheory']); 
     unset ($subject['longTheory']); 
    } 
} 

但这些似乎并不管用。

+1

凡'$ kl'定义? – Fabio 2013-05-11 08:30:25

+0

你想从'$ subs'数组中删除一个元素?它是一个数字数组,不是关联的。它的元素是关联数组。 – 2013-05-11 08:33:56

+0

我有两个函数使用相同的数组(声明为全局)。 '$ kl'是第二个函数的参数 – Jannuzzo 2013-05-11 08:35:07

回答

3

为了能够直接修改循环中的数组元素 在$ value前面&。在这种情况下,该值将由 参考分配。

使用&foreach ($subs as &$subject)

foreach ($subs as &$subject) 
    if ($subject['knowledgeLevel'] == $kl) 
     unset ($subject); 

或者试试这个:

这种形式将额外分配当前的元素,在每个迭代$键 可变密钥。

foreach ($subs as $key => $subject) 
    if ($subject['knowledgeLevel'] == $kl) 
     unset($subs[$key]); 
+0

以及我尝试过的哪一个解决方案我必须使用? – Jannuzzo 2013-05-11 08:36:28

+0

有没有不同,但我自己选择第二。因为它清晰。 – ncm 2013-05-11 08:42:07

+0

@Jannuzzo。欢迎来到stackoverflow。让我提醒你一些事情。 ( - : – ncm 2013-05-11 08:46:18

0

$subject没有提及$subs它的新的变量,并与unset($subject['anything'])你是不是删除从$subs任何

使用for循环:

for($i=0;$i<count($subs);$i++) { 
    if ($subs[$i]['knowledgeLevel'] == $kl) { 
     unset ($subs[$i]); 
    } 
}