如何查找在字符串中只出现一次的数字?
How to find numbers that only appears once in a string?
假设我有输入字符串
String 1 : 1234123
String 2 : 76523752
从这些字符串中,我想知道哪些数字只出现一次。所以在我的例子中,输出应该是
String 1 : array(4)
String 2 : array(6,3)
我猜我会使用 strpos()
来完成这项任务,但我无法获得任何逻辑流程来实现这一目标。你能帮我解决这个问题吗?
无聊的解决方案但是 it works!
$string="1234123";
$result=array();
foreach (count_chars($string, 1) as $i => $val) {
if($val==1) $result[]=chr($i);
}
print_r($result);
使用array_keys
、array_filter
、array_count_values
和str_split
函数的解决方案:
$strings = [
'String 1' => '1234123',
'String 2' => '76523752'
];
$result = [];
foreach ($strings as $k => $v) {
$result[$k] = array_keys(array_filter(array_count_values(str_split($v)), function($v){
return $v == 1;
}));
}
print_r($result);
输出:
Array
(
[String 1] => Array
(
[0] => 4
)
[String 2] => Array
(
[0] => 6
[1] => 3
)
)
替代方案:
$string = "1235235236";
$res=[];
foreach(str_split($string) as $c) $res[$c]++;
$res = array_filter($res, function($a){return $a == 1;});
var_dump($res);
假设我有输入字符串
String 1 : 1234123
String 2 : 76523752
从这些字符串中,我想知道哪些数字只出现一次。所以在我的例子中,输出应该是
String 1 : array(4)
String 2 : array(6,3)
我猜我会使用 strpos()
来完成这项任务,但我无法获得任何逻辑流程来实现这一目标。你能帮我解决这个问题吗?
无聊的解决方案但是 it works!
$string="1234123";
$result=array();
foreach (count_chars($string, 1) as $i => $val) {
if($val==1) $result[]=chr($i);
}
print_r($result);
使用array_keys
、array_filter
、array_count_values
和str_split
函数的解决方案:
$strings = [
'String 1' => '1234123',
'String 2' => '76523752'
];
$result = [];
foreach ($strings as $k => $v) {
$result[$k] = array_keys(array_filter(array_count_values(str_split($v)), function($v){
return $v == 1;
}));
}
print_r($result);
输出:
Array
(
[String 1] => Array
(
[0] => 4
)
[String 2] => Array
(
[0] => 6
[1] => 3
)
)
替代方案:
$string = "1235235236";
$res=[];
foreach(str_split($string) as $c) $res[$c]++;
$res = array_filter($res, function($a){return $a == 1;});
var_dump($res);