本人想通过取得二维数组中某两个值,该二维数组为n*2形式,比如为第i行的这两个值,我想实现这样的一个比较,用这第i行的两个值,分别与0到i-1行的值,彼此进行比较。请问这个算法该如何去实现?如果没有相同的结果值得话,就显示输出这组值,如果有的话,就不进行输出了!
请各位给一个思路,并且大致实现能给与提示

解决方案 »

  1.   


    1 2
    2 2
    3 2
    2 1
    1 2<?php
    $arr = array( ... ); //二维数组$count = count( $arr );for( $i = 1; $i <= ( $count - 1 ); $i++ )
    {
        for( $k = 0; $k < $i; $k++ )
        {
            if( ( $arr[$k][0] != $arr[$i][0] ) && ( $arr[$k][1] != $arr[$i][1] ) )
            {
                print_r( $arr[$i] );
            }
        }
    } ?>
    这样不知道行不行,在网吧写的,呵呵...
      

  2.   

    // 借用一下楼上的代码~
    <?php
    $arr = array( ... ); //二维数组$count = count( $arr );for( $i = 1; $i <= ( $count - 1 ); $i++ )
    {
        for( $k = 0; $k < $i; $k++ )
        {
            if( ( $arr[$k][0] != $arr[$i][0] ) and ( $arr[$k][1] != $arr[$i][1] ) )
                       // 按照楼主的意思,这里可能不是 and 而是 or
            {
                print_r( $arr[$i] );
                break; // 不然会导致重复输出
            }
        }
    } ?>。
      

  3.   


            for($i=0;isset($arr[$i]);$i++){
    if($i==0) continue; 
    $temp = array();
    for($j=0;$j<$i;$j++){
    $temp[] = $arr[$j];
    }
    if(!in_array($arr[$i],$temp)){
    echo '第'.$i.'行 值1为'.$arr[$i][0].'&nbsp;,值2为'.$arr[$i][1];
    echo '<hr />';
    }
    }
      

  4.   

    我是得到这个二维数组大致是如下得到的:$i=0;//初始化游标变量
    $sql="select upcode,dcode,ditem,dname,material from table where upcode='$一输入值'";
    $stmt=ociparse($conn,$sql);
    while(ocifetchinto($stmt,$row,OCI_ASSOC)){
        $data[0][$i]=$row["upcode"];
        $data[1][$i]=$row["dcode"];
        $data[2][$i]=$row["ditem"];
        $data[3][$i]=$row["dname"];
        $data[4][$i]=$row["material"];
        
        $i++;
        //此时在这个ocifetchinto中,再次执行这个sql查询
         
        $sql1="select upcode,dcode,ditem,dname,material from table where upcode='$一输入值'";
        $stmt1=ociparse($conn,$sql1);
        while(ocifetchinto($stmt1,$row1,OCI_ASSOC)){
            $data[0][$i]=$row1["upcode"];
            $data[1][$i]=$row1["dcode"];
            $data[2][$i]=$row1["ditem"];
            $data[3][$i]=$row1["dname"];
            $data[4][$i]=$row1["material"];
        
            $i++;
            //总共是进行九次这种查询就几乎可以遍历整个孩子节点了
             $sql2="…………";
    }
    请问上面这种情况下得到的二维数组我怎么得到类似3,4楼上面说的那个$arr这个二维数组呢?
      

  5.   

    按你的说法$data[0]下面就应该有9个值,或者更多..那么"用这第i行的两个值"是什么意思那如果是9个值是否是这9个值和前面的其它(0 i-1)其中的9个值完全相同才算"有"相同的结果值那
      

  6.   

    向我上面提到的$data[0][$i]----$date[4][$i],前一个方括号相当于列信息,而后面的$i相当于一个行信息。我上面所说的第i行对应的就是$i的值。
    我在上面少说明了一些情况: 这里面upcode和ditem两个字段是联合主键,如果说是判断的话 ,只要判断这两个主键是否完全相同即可,而不需要所有的信息都一样才判断为是一样的。
    我这里说明的是 每一行总共有五个字段,即五列。
      

  7.   

    怎么把你项目中的代码都列出来了,我尝试帮你归纳下问题.问题:
    有一数组,类似以下
    =====================
    //假设a,b为数据表的union index
    $arr[0] = array("a"=>1,"b"=>2,"c"=>3);
    $arr[1] = array("a"=>1,"b"=>3,"c"=>4);
    $arr[2] = array("a"=>1,"b"=>3,"c"=>7);
    $arr[3] = array("a"=>2,"b"=>4,"c"=>4);
    $arr[4] = array("a"=>1,"b"=>3,"c"=>12);最终需要的结果:
    ================================
    //因为其它3行数据的a,b为相同值
    $arr[0] = array("a"=>1,"b"=>2,"c"=>3);
    $arr[4] = array("a"=>1,"b"=>3,"c"=>4);是不是这样?
      

  8.   

    向我上面提到的$data[0][$i]----$date[4][$i],前一个方括号相当于列信息,而后面的$i相当于一个行信息。我上面所说的第i行对应的就是$i的值。那你生成数组不该这样,应该是生成$data[$i][0]----$date[$i][4],这样的二维数组可直接用上述答案代码,其上述代码中显示或者判断的,0和1,改成你需要比较的两个upcode和ditem对应的序号,0和2即可
      

  9.   

    晕,贴快了最终需要的结果:
    ================================
    //因为其它3行数据的a,b为相同值 
    $arr[0] = array("a"=>1,"b"=>2,"c"=>3); 
    $arr[3] = array("a"=>2,"b"=>4,"c"=>4);是不是这样? 
      

  10.   

    如果按照10楼所说的话 应该实现的是
    //因为其它3行数据的a,b为相同值 
    $arr[0] = array("a"=>1,"b"=>2,"c"=>3); 
    $arr[3] = array("a"=>2,"b"=>4,"c"=>4);
    $arr[4] = array("a"=>1,"b"=>3,"c"=>12);
    其中只选择union key唯一的一条记录
    这里面显示$arr[1]/$arr[2]/$arr[4]哪一条都可以,按照我的题意的话,当$arr[1]显示的时候,2,4两条一比较之后就不再显示了。
      

  11.   


    //假设a,b为数据表的union index
    $arr[0] = array("a"=>1,"b"=>2,"c"=>3);
    $arr[1] = array("a"=>1,"b"=>3,"c"=>4);
    $arr[2] = array("a"=>1,"b"=>3,"c"=>7);
    $arr[3] = array("a"=>2,"b"=>4,"c"=>4);
    $arr[4] = array("a"=>1,"b"=>3,"c"=>12);//结果不是要为
    $arr[1] 
    $arr[3]
    不明白了
      

  12.   

    这样问题不就简洁了,不用绕那么多弯弯 。
    这个是显示相同 union index的第一条。供参考
    $arr[0] = array("a"=>1,"b"=>2,"c"=>3);//要这个
    $arr[1] = array("a"=>1,"b"=>3,"c"=>4);//这个
    $arr[2] = array("a"=>1,"b"=>3,"c"=>7);
    $arr[3] = array("a"=>2,"b"=>4,"c"=>4);//这个
    $arr[4] = array("a"=>1,"b"=>3,"c"=>12);
    foreach($arr as $k=>$v)
    {
    if(!$rs[$v['a'].$v['b']])
    {
    $r[] = $v;
    $rs[$v['a'].$v['b']] = 1;
    }

    }
    echo "<pre/>";
    print_r($r);
      

  13.   


    15楼的不错,时间复杂度要比4楼的小
    不过需要作一点修改:
    $arr[0] = array("a"=>1,"b"=>2,"c"=>3);//要这个
    $arr[1] = array("a"=>1,"b"=>3,"c"=>4);//这个
    $arr[2] = array("a"=>1,"b"=>3,"c"=>7);
    $arr[3] = array("a"=>2,"b"=>4,"c"=>4);//这个
    $arr[4] = array("a"=>1,"b"=>3,"c"=>12);
    foreach($arr as $k=>$v)
    {
        if(!$rs[$v['a'].$v['b']])
    // 上面这一行的键值需要插入一个标记符号,就像这样:
    //  if(!$rs[$v['a']."sign".$v['b']])
    //  否则就无法区分a=12,b=3 和a=1,b=23的情况了    {
            $r[] = $v;
            $rs[$v['a'].$v['b']] = 1;
    // 同理,上面这行也需要修改
    // $rs[$v['a']."sign".$v['b']] = 1;    }
        
    }
    echo "<pre/>";
    print_r($r);
      

  14.   

    像我这种情况 是不是$arr这个二维数组需要动态的生成呢?
    请问如何去动态生成这个二维数组?
      

  15.   

    对的..要生成:$data[$i][0]----$date[$i][4],而不是$data[0][$i]----$date[4][$i],
      

  16.   


    键值可以省略,这样就是使用数字键值并自动+1$arr = array(); // 先初始化
    for($i = 5, $i < 9, $i+){
      $arr[] = $i;
    }// 最后得到的数组是这样的:
    // $arr = array( 0 => 5, 1 => 6, 2 => 7, 3 => 8)
      

  17.   

    如何生成一个二维数组:
    result是查询结果,m是查询的列数,$j是行数,$i是列数
    while($row=mysql_fetch_row($result)){
        for($i=0;$i<m;$i++)
             $data[$j][$i]=$row[i];
        $j++;
    }  
      

  18.   

    这个还是无法区分1sign 23,和1 sign23,
    可以$rs[rtrim($v['a'],'-').'-'.ltrim($v['b'],'-')]=1.
    ===================================================================
    那我想问一问 如果是生成一个二维数组呢?
    该如何去生成?
    ====================================================================
    这个是数据集处理最基本的操作。
    while($row=mysql_fetch_row($result)){
       $data[] = $row;

    print_r($data);
      

  19.   

    Thanks!
    I'm really fool.