2017-05-26 165 views
1

如果我有一个值'28',并且我想通过数组搜索包含该值的索引并将其删除。有没有办法通过数组中的每个元素运行for循环?使用键删除索引数组中的数组元素

在这种情况下,我会想删除的元素$terms[7] or 6 => 28

$needle = 28; 
$terms = array(
    0 => 42 
    1 => 26 
    2 => 27 
    3 => 43 
    4 => 21 
    5 => 45 
    6 => 28 
    7 => 29 
    8 => 30 
    9 => 31 
    10 => 46 
); 
+0

根据您的程序需求,这有点棘手。 28可以多次出现?是否需要取消设置搜索词的所有实例或仅找到第一个实例?总之,无论是哪种方式,您都需要在未排序的阵列上使用循环,并根据功能要求稍作改进。 –

+0

@ Patrick - 它只会在数组中出现一次。数字28表示您正在查看的当前页面术语/类别。谢谢 – George

回答

4
if (false !== array_search('28', $terms)) { 
     unset($terms[array_search('28', $terms)]); 
} 
1

您可以使用array_keys找到针的所有指数法。

array_keys

<?php 
    $needle = 28; 
    $haystack = [42, 26, 27, 43, 21, 45, 28, 29, 30, 31, 28, 46]; 
    $results = array_keys($haystack, $needle, true); 
    while (!empty($results)) { 
     unset($haystack[array_shift($results)]); 
    } 
+0

如果你只是想把OP指向一个函数,那么它是一个评论,而不是一个答案。如果你想写一些代码和解释,它就成为了OP和其他人现在可以理解和使用的答案,当其他人看到答案 – RiggsFolly

+0

指向的时候。我添加了一个可以解决多个匹配问题的示例。 –

2

正如上面提到的,使用array_search()查找该项目。然后,使用unset()将其从阵列中删除。

$haystack = [42, 28, 27, 45]; 
$needle = 28; 

$index = array_search($needle, $haystack); 

if ($index !== false) { 
    unset($haystack[$index]); 
} else { 
    // $needle not present in the $haystack 
}