Php 检查数组中的分解值是否与另一个分解值重复

Php 检查数组中的分解值是否与另一个分解值重复,php,arrays,Php,Arrays,你好,试着在数组中找到重复的值,我有这样的数组 $array = array('1%2','3%4','1%2',1%3); 所以我想在%之后找到重复的2,所以我在foreach内部使用了explode foreach($array as $value){ $s = explode('%',$value); if($s[1] == $s[1]){ echo 'there are duplicated 2'; } } 所以我想检查数组中%之后的值是否重复 是否仍有这样

你好,试着在数组中找到重复的值,我有这样的数组

$array = array('1%2','3%4','1%2',1%3);
所以我想在
%
之后找到重复的
2
,所以我在foreach内部使用了explode

foreach($array as $value){
   $s = explode('%',$value);
   if($s[1] == $s[1]){
    echo 'there are duplicated 2';
   }
}
所以我想检查数组中
%
之后的值是否重复
是否仍有这样做的方法

在循环查看右侧值并检查重复项时,您需要收集右侧值。我通过字符串的“偏移量”
[2]
访问字符串的右侧值。找到后,您可以使用
中断退出循环

代码:()

输出:

Element (index 2) containing 1%2 has duplicate right side value.
array (
  0 => '1%2',
  3 => '3%2',
  4 => '5%2',
)
array (
  0 => '21%2',
  5 => '5%2',
)
array (
  2 => 
  array (
    0 => '1%2',
    1 => '3%2',
    2 => '5%2',
  ),
  3 => 
  array (
    0 => '1%3',
  ),
  4 => 
  array (
    0 => '1%4',
  ),
)
// [right side values] => [counts]
array (
  2 => 3,
  3 => 1,
  4 => 1,
)

如果要搜索以
%2
结尾的所有元素,可以使用
preg\u grep()

代码:

输出:

Element (index 2) containing 1%2 has duplicate right side value.
array (
  0 => '1%2',
  3 => '3%2',
  4 => '5%2',
)
array (
  0 => '21%2',
  5 => '5%2',
)
array (
  2 => 
  array (
    0 => '1%2',
    1 => '3%2',
    2 => '5%2',
  ),
  3 => 
  array (
    0 => '1%3',
  ),
  4 => 
  array (
    0 => '1%4',
  ),
)
// [right side values] => [counts]
array (
  2 => 3,
  3 => 1,
  4 => 1,
)

如果没有regex,则需要更多的函数调用:

$search=2;
$array=['21%2','1%3','2%22','1%4','3%21','5%2'];
var_export(array_filter($array,function($v)use($search){return strpos($v,"%$search")+2===strlen($v);}));
输出:

Element (index 2) containing 1%2 has duplicate right side value.
array (
  0 => '1%2',
  3 => '3%2',
  4 => '5%2',
)
array (
  0 => '21%2',
  5 => '5%2',
)
array (
  2 => 
  array (
    0 => '1%2',
    1 => '3%2',
    2 => '5%2',
  ),
  3 => 
  array (
    0 => '1%3',
  ),
  4 => 
  array (
    0 => '1%4',
  ),
)
// [right side values] => [counts]
array (
  2 => 3,
  3 => 1,
  4 => 1,
)

…[深呼吸]这是一个尝试性的答案#4

代码:

输出:

Element (index 2) containing 1%2 has duplicate right side value.
array (
  0 => '1%2',
  3 => '3%2',
  4 => '5%2',
)
array (
  0 => '21%2',
  5 => '5%2',
)
array (
  2 => 
  array (
    0 => '1%2',
    1 => '3%2',
    2 => '5%2',
  ),
  3 => 
  array (
    0 => '1%3',
  ),
  4 => 
  array (
    0 => '1%4',
  ),
)
// [right side values] => [counts]
array (
  2 => 3,
  3 => 1,
  4 => 1,
)

如果要计算数组中的右侧值:

$array=['1%2','1%3','1%4','3%2','5%2'];
$array=preg_replace('/\d+%/','',$array);  // strip the left-size and % from elements
var_export(array_count_values($array));  // count occurrences
输出:

Element (index 2) containing 1%2 has duplicate right side value.
array (
  0 => '1%2',
  3 => '3%2',
  4 => '5%2',
)
array (
  0 => '21%2',
  5 => '5%2',
)
array (
  2 => 
  array (
    0 => '1%2',
    1 => '3%2',
    2 => '5%2',
  ),
  3 => 
  array (
    0 => '1%3',
  ),
  4 => 
  array (
    0 => '1%4',
  ),
)
// [right side values] => [counts]
array (
  2 => 3,
  3 => 1,
  4 => 1,
)

将分解的检查值存储在一个数组中,然后使用
in_array
检查该数组的未来值。我不明白in_array函数如何帮助我显示重复的值?您好,谢谢,但是$v[2]返回1%2,但我需要搜索%之后的数字,并检查它是否重复让我们假设我的数组类似于$a=数组('1%2'、'1%3'、'1%4'、'3%2'、'5%2');我希望我的输出是,有3个重复的值1%2、3%2和5%2我已经在我的最新方法中添加了一个搜索变量。这就是你要找的吗?您好,谢谢,但2只是一个示例,我想检查%1之后的每个数字是否重复表示a=array('1%3','2%4','3%3','5%4','1%6','3%2'));我希望输出结果是数字3有两个重复值,数字4有两个重复值,这就是我想要的,%之后的值。它的自定义值用户可以添加任何数字。我想我以前从来没有遇到过这样的问题。请告诉我,在我的答案组中,您正在寻找解决方案。如果没有,请在您的问题上以编辑的形式发布相关输入和期望输出。此时,我不知道正确答案是什么(未来的读者也不知道)。请帮我们澄清您期望的输出是什么。