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


php array , delete a value if matching

我有一个数组,如下所示:

 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。用"-"爆炸后。

我该怎么做?

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]);
    }
}

您可以使用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]);
  }
}

使用此函数,这将为您提供所有匹配的密钥:

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;
}

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

现在您可以删除这些,即取消设置该数组中的所有键。:)

<?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);
?>

你可以试试这个。。。

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

有几种方法可以做到这一点。如果你的三元组的第一个省略部分总是只有一个数字,那么下面的代码应该可以工作;

$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++
}

希望这有帮助:-)