Php 比较字符串并获取唯一值的有效方法

Php 比较字符串并获取唯一值的有效方法,php,html,arrays,string,string-comparison,Php,Html,Arrays,String,String Comparison,我有逗号分隔的n个Sting数字,包含1,2,3,4,5,6等数字,它们的长度可以是n。我必须找到所有字符串中出现的数字 输入示例: $str1 = '1,2,3,4,5,6,7,8,9'; $str2 = '0,1,4,5,6,7,10,20,23,34,333,78'; $str3 = '5,4,8,3,1,1,1,5,6'; 预期产出: $result = '1,4,5,6'; 我知道我可以通过比较每个字符串来做到这一点,但效率不高。 第二个

我有逗号分隔的n个Sting数字,包含
1,2,3,4,5,6等数字,它们的长度可以是
n
。我必须找到所有字符串中出现的数字

输入示例:

$str1       = '1,2,3,4,5,6,7,8,9';
$str2       = '0,1,4,5,6,7,10,20,23,34,333,78';
$str3       = '5,4,8,3,1,1,1,5,6';
预期产出:

$result     = '1,4,5,6';
我知道我可以通过比较每个字符串来做到这一点,但效率不高。 第二个选项是获取最短字符串,然后对照每个字符串检查该字符串的编号。这将是一个小效率比前一个

我想做的就是找到更有效的方法

编辑:

我的html,从中获取值:

<form name="cstm_data_form" id="cstm_data_form">
    <div id="dataSet0" onclick="removeCandidate(0)">
        <input type="hidden" name="hidden_ward_name[0]" value="1,2,3,4,5,6,7,8,9,10,11,12,12,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,50,52,53,54,58,59,60,61,62,63,64,65,66">   
    </div>
    <div id="dataSet1" onclick="removeCandidate(1)">

        <input type="hidden" name="hidden_ward_name[1]" value="4,5,6,7,8,9,10,11,12,13,14,15,16,64,65,66">

    </div>
    <div id="dataSet2" onclick="removeCandidate(2)">
        <input type="hidden" name="hidden_ward_name[2]" value="1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,53,54,55,56,57,58,59,60,61,62,63,64,65,66">

    </div>
    <div id="dataSet3" onclick="removeCandidate(3)">
        <input type="hidden" name="hidden_ward_name[3]" value="1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35">

    </div>
</form>

试试看

编辑:要点是将字符串转换为数组,然后获取并最终选择值。

试试看

编辑:要点是将字符串转换为数组,然后获取并最终选择值。

试试看

编辑:要点是将字符串转换为数组,然后获取并最终选择值。

试试看

编辑:重点是将字符串转换为数组,然后获取并最终拾取值

这应该行得通。如果你想要一个
做一个
explode()
,就像其他展示给你的一样

这应该行得通。如果你想要一个
做一个
explode()
,就像其他展示给你的一样

这应该行得通。如果你想要一个
做一个
explode()
,就像其他展示给你的一样


这应该行得通。如果您想要一个
执行一个
分解()
,就像其他演示给您的一样。

将字符串转换为数组,然后将返回公共值

$arr1       = explode(',','1,2,3,4,5,6,7,8,9');
$arr2       = explode(',','0,1,4,5,6,7,10,20,23,34,333,78');
$arr3       = explode(',','5,4,8,3,1,1,1,5,6');
$arrayInterset = array_intersect($arr1, $arr2, $arr3);

echo '<pre>';print_r($arrayInterset);echo '</pre>';

将字符串转换为数组,然后返回公共值

$arr1       = explode(',','1,2,3,4,5,6,7,8,9');
$arr2       = explode(',','0,1,4,5,6,7,10,20,23,34,333,78');
$arr3       = explode(',','5,4,8,3,1,1,1,5,6');
$arrayInterset = array_intersect($arr1, $arr2, $arr3);

echo '<pre>';print_r($arrayInterset);echo '</pre>';

将字符串转换为数组,然后返回公共值

$arr1       = explode(',','1,2,3,4,5,6,7,8,9');
$arr2       = explode(',','0,1,4,5,6,7,10,20,23,34,333,78');
$arr3       = explode(',','5,4,8,3,1,1,1,5,6');
$arrayInterset = array_intersect($arr1, $arr2, $arr3);

echo '<pre>';print_r($arrayInterset);echo '</pre>';

将字符串转换为数组,然后返回公共值

$arr1       = explode(',','1,2,3,4,5,6,7,8,9');
$arr2       = explode(',','0,1,4,5,6,7,10,20,23,34,333,78');
$arr3       = explode(',','5,4,8,3,1,1,1,5,6');
$arrayInterset = array_intersect($arr1, $arr2, $arr3);

echo '<pre>';print_r($arrayInterset);echo '</pre>';

这应该适合您:

只需循环使用所有变量,用逗号表示,并将分解后的数组放入
$arr

在此之后,只需调用with,它将以以下方式调用函数:
array\u intersect($arr[0],$arr[1],…)

最后,只需使用从数组中获取所有唯一值


这应该适合您:

只需循环使用所有变量,用逗号表示,并将分解后的数组放入
$arr

在此之后,只需调用with,它将以以下方式调用函数:
array\u intersect($arr[0],$arr[1],…)

最后,只需使用从数组中获取所有唯一值


这应该适合您:

只需循环使用所有变量,用逗号表示,并将分解后的数组放入
$arr

在此之后,只需调用with,它将以以下方式调用函数:
array\u intersect($arr[0],$arr[1],…)

最后,只需使用从数组中获取所有唯一值


这应该适合您:

只需循环使用所有变量,用逗号表示,并将分解后的数组放入
$arr

在此之后,只需调用with,它将以以下方式调用函数:
array\u intersect($arr[0],$arr[1],…)

最后,只需使用从数组中获取所有唯一值


对于html表单上下文中的某些内容,作为通过值的循环:


对于html表单上下文中的某些内容,作为通过值的循环:


对于html表单上下文中的某些内容,作为通过值的循环:


对于html表单上下文中的某些内容,作为通过值的循环:


从我的立场看,这像是家庭作业。并不是说这有什么问题。显示你当前的代码和你被卡住的地方。+几乎已经涵盖了这一点。@Andrew这不是家庭作业或作业。这是现实生活中的问题。我已经更新了问题。请看一看,我现在很困惑。你的问题和这个html有什么关系?!从我的立场看,这像是家庭作业。并不是说这有什么问题。显示你当前的代码和你被卡住的地方。+几乎已经涵盖了这一点。@Andrew这不是家庭作业或作业。这是现实生活中的问题。我已经更新了问题。请看一看,我现在很困惑。你的问题和这个html有什么关系?!从我的立场看,这像是家庭作业。并不是说这有什么问题。显示你当前的代码和你被卡住的地方。+几乎已经涵盖了这一点。@Andrew这不是家庭作业或作业。这是现实生活中的问题。我已经更新了问题。请看一看,我现在很困惑。你的问题和这个html有什么关系?!从我的立场看,这像是家庭作业。并不是说这有什么问题。显示你当前的代码和你被卡住的地方。+几乎已经涵盖了这一点。@Andrew这不是家庭作业或作业。这是现实生活中的问题。我已经更新了问题。请看一看,我现在很困惑。你的问题和这个html有什么关系?!为什么OP要“试试这个”?请添加一个解释,说明你做了什么,以及你为什么这样做,不仅是为了OP,也是为了SO的未来访客。OP为什么要“尝试这个”?请添加一个解释,说明你做了什么,以及你为什么这样做,不仅是为了OP,也是为了SO的未来访客。OP为什么要“尝试这个”?请添加一个解释,说明你做了什么,以及你为什么这样做,不仅是为了OP,也是为了SO的未来访客。OP为什么要“尝试这个”?请添加您所做的以及您为什么这样做的解释,不仅是为了OP,也是为了未来的SO访客。
<?php

    $str1       = '1,2,3,4,5,6,7,8,9';
    $str2       = '0,1,4,5,6,7,10,20,23,34,333,78';
    $str3       = '5,4,8,3,1,1,1,5,6';

    $i = 1;
    while(isset(${"str" . $i})) {
        $arr[] = explode(",", ${"str" . $i});
        $i++;
    }

    $result = array_unique(call_user_func_array("array_intersect", $arr));
    print_r($result);  //As a string: echo implode(",", $result);

?>
Array
(
    [0] => 1
    [3] => 4
    [4] => 5
    [5] => 6
)
foreach($_REQUEST['hidden_ward_name'] as $key=>$string) {
        if($key == 0) {
                $result = array_unique(explode(',', $string));
        } else {
                $result = array_intersect(array_unique(explode(',', $string)), $result);
        }
}

print_r(array_sort($result));