Php 如何找到&;替换多维数组中的重复值

Php 如何找到&;替换多维数组中的重复值,php,arrays,Php,Arrays,我有一个允许用户提交表单的脚本。每次提交表单都会创建一个新行(数组),该行显示在名为$pvrbs['pramtrs']的文本区域中。每个数组的每个值都由textarea中的双管道分隔。当用户完成向textarea添加行时,他单击一个按钮,将textarea保存到平面文件中 下面是创建多维数组和平面文件的函数片段: function create_pcFile($pName) { $pcnf = "<" . "?php \n";

我有一个允许用户提交表单的脚本。每次提交表单都会创建一个新行(数组),该行显示在名为
$pvrbs['pramtrs']
的文本区域中。每个数组的每个值都由textarea中的双管道分隔。当用户完成向textarea添加行时,他单击一个按钮,将textarea保存到平面文件中

下面是创建多维数组和平面文件的函数片段:

function create_pcFile($pName) {    
    $pcnf = "<" . "?php  \n";
    $pur = explode("\n",stripslashes(trim($pvrbs['pramtrs'])));
    $pcnt = 0;
    $uses = 0;
    $cnAry = array();
    foreach ($pur as $pline) {
        $pline = trim($pline);
        $lary = explode("||",$pline);
        
        if ( !verify_cd($lary[0]) ) { $lary[0] = "<<<ERROR>>>"; }
        if ( !verify_url($lary[1]) ) { $lary[1] = "<<<ERROR>>>"; }
        if ( !verify_securerpage($lary[2]) ) { $lary[2] = "<<<ERROR>>>"; }
        if ( !verify_url($lary[3]) ) { $lary[3] = "<<<ERROR>>>"; }
        if ( !verify_date($lary[4]) ) { $lary[4] = "<<<ERROR>>>"; }
        if ( !verify_date($lary[5]) ) { $lary[5] = "<<<ERROR>>>"; }
        if ( !verify_uss($lary[6]) ) { $lary[6] = "<<<ERROR>>>"; }
        
        if( (isset($lary[0])) && (isset($lary[1])) && (isset($lary[2])) && (isset($lary[3])) && (isset($lary[4])) && (isset($lary[5])) && (isset($lary[6]))) {
            $cnAry[] = $lary;
        }
    }
    $Stg = '';              
    if(is_array($cnAry) && !empty($cnAry) ) {               
        foreach ($cnAry as $ary) {                   
                $Stg .= "array(\"" . $ary[0] . "\", \"" . $ary[1] . "\", \"" . $ary[2] . "\", \"" . $ary[3] . "\", \"" . $ary[4] . "\", \"" . $ary[5] . "\", \"" . $ary[6] . "\"), ";
        }
    }
    $pcnf .= "$" . "params = array(" . rtrim($parStg, ", ") . ");\n";   // Trim ", " off of final array.
    $pcnf .= "$" . "erPage = \"" . $pvrbs['erPage'] . "\";\n";
    $pcnf .= "?" . ">";         
    $x = start_file($pName, $pcnf);
    return;
}
下面是对应于上面文本区域的平面文件:

<?php  
$params = array(array("111", "https://1.com/", "No", "https://e.com/", "07/12/2020", "07/30/2021", "2"), array("222", "https://2.com", "No", "https://3.com", "07/30/2020", "07/30/2021", "5"), array("111", "https://6.com", "No", "https://4.net", "07/30/2020", "07/30/2021", "7"));
$erPage = "https://t.com";
?>
下面是平面文件的外观:

<?php  
$params = array(array("111", "https://1.com/", "No", "https://e.com/", "07/12/2020", "07/30/2021", "2"), array("222", "https://2.com", "No", "https://3.com", "07/30/2020", "07/30/2021", "5"), array("<<<DUPLICATE>>>", "https://6.com", "No", "https://4.net", "07/30/2020", "07/30/2021", "7"));
$erPage = "https://t.com";
?>

而不是说:

$cnAry[]=$lary

这样做:

if(数组键存在($lary[0],$keys)){
//重复!
$lary[0]='';
}否则{
//原件(非复制品)
$keys[$lary[0]]=true;
}
$cnAry[]=$lary;
下面是它的工作原理:

$keys
是您以前见过的一组密钥。如果
$lary[0]
存在于
$keys
中,则它是一个复制,我们将
$lary[0]
更改为
,然后将其附加到
$cnAry

如果
$lary[0]
$keys
中不存在,这意味着它是原始的(不是复制的),因此我们将该键添加到
$keys
以跟踪我们刚刚看到的


另外,您可能应该声明
$keys=[]循环前的变量,以避免PHP警告。

谢谢!效果很好。很高兴您提到声明
$keys=[]。使我免于另一次头痛。
111||https://1.com/||No||https://e.com/||07/12/2020||07/30/2021||2
222||https://2.com||No||https://3.com||07/30/2020||07/30/2021||5
<<<DUPLICATE>>>||https://6.com||No||https://4.net||07/30/2020||07/30/2021||7
<?php  
$params = array(array("111", "https://1.com/", "No", "https://e.com/", "07/12/2020", "07/30/2021", "2"), array("222", "https://2.com", "No", "https://3.com", "07/30/2020", "07/30/2021", "5"), array("<<<DUPLICATE>>>", "https://6.com", "No", "https://4.net", "07/30/2020", "07/30/2021", "7"));
$erPage = "https://t.com";
?>