php数组,如果匹配则删除一个值

时间:2012-09-03 06:45:42

标签: php arrays

我有一个如下数组:

 5-9-21, 
 5-10-22,
 5-10-22,
 5-11-23,
 3-17-29,
 3-19-31,
 3-19-31,
 1-25-31,
 7-30-31

我会动态获取一个值。然后我必须将该值与数组的中间部分进行比较。

9,
10,
10,
11,
17,
19,
19,
25,
30

如果它匹配,那么我必须从数组中删除整个部分。 例如。如果我动态得到一个值是19,那么我将与该数组匹配。 3-19-31有两次。因此它将删除所有3-19-31。用“ - ”爆炸后。

我该怎么做?

6 个答案:

答案 0 :(得分:2)

您可以使用array_filter来获取新数组。

$new_arr = array_filter($old_arr, function($var) use ($input) {
  $ret = explode('-', $var);
  return !(isset($ret[1]) && $ret[1] === $input);
});

或者使用普通循环,然后使用unset删除值。

for ($arr as $key => $value) {
  $ret = explode('-', $value);
  if (isset($ret[1]) && $ret[1] === $input) {
    unset($arr[$key]);
  }
}

答案 1 :(得分:2)

foreach($array as $key=>$value){
    $parts = explode('-', $value);
    if($parts[1] == $search) {
        unset($array[$key]);
    }
}

或者,如果您的搜索是数组

foreach($array as $key=>$value){
    $parts = explode('-', $value);
    if(in_array($parts[1], $search)) {
        unset($array[$key]);
    }
}

答案 2 :(得分:0)

你可以试试这个......

$arr; // your array
$value = 19;

foreach ($arr as $key=>$a)
{
    if(strpos($a, "-".$value."-") !== false)
        unset($arr[$key]);
}

答案 3 :(得分:0)

有几种方法可以做到这一点。如果您的三元组的第一个元素中只有一个数字,则以下代码应该有效;

$triplet_array = array(5-9-21, 5-10-22, 5-10-22, 5-11-23, 3-17-29, 3-19-31, 3-19-31, 1-25-31, 7-30-31);
$i = 0;
foreach($triplet_array as triplet){
  $middle = substring($triplet,2,0);
  if($middle == $my_dynamic_value) unset($triplet_array[$i]);
  $i++
}

但是,如果第一部分总是不会只包含一个数字;

foreach($triplet_array as triplet){
  $this_triplet = explode('-',$triplet);
  if($this_triplet[1] == $my_dynamic_value) unset($triplet_array[$i]);
  $i++
}

希望这会有所帮助: - )

答案 4 :(得分:0)

使用此功能,这将为您提供匹配的所有键:

function custom_array_search($keyword,$array){
  if(!is_array($array)){
    return false;
  }
  $ret_keys = array();
  foreach($array as $key=>$value){
    if(strpos("-{$keyword}-",$value)!==false){
      $ret_keys[] = $key;
    }
  }
  return $ret_keys;
}

此函数将为您提供数组中的所有键。

现在您可以删除那些,即取消设置该阵列中的所有键。 :)

答案 5 :(得分:0)

<?php
$arr = array('5-9-21', '5-10-22', '5-10-22', '5-11-23', '3-17-29', '3-19-31', '3-19-31', '1-25-31', '7-30-31');
$k = '10';
#print_r($arr);
foreach ($arr as $key => $value)
{
    $t = explode('-',$value);
    if($t[1] == $k)
    {
        unset($arr[$key]);
        #echo "deleted<br>";
    }
}
#print_r($arr);
?>