请教一算法问题: 本人想通过取得二维数组中某两个值,该二维数组为n*2形式,比如为第i行的这两个值,我想实现这样的一个比较,用这第i行的两个值,分别与0到i-1行的值,彼此进行比较。请问这个算法该如何去实现?如果没有相同的结果值得话,就显示输出这组值,如果有的话,就不进行输出了!请各位给一个思路,并且大致实现能给与提示 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1 22 23 22 11 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] ); } }} ?>这样不知道行不行,在网吧写的,呵呵... // 借用一下楼上的代码~<?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; // 不然会导致重复输出 } }} ?>。 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].' ,值2为'.$arr[$i][1]; echo '<hr />'; } } 我是得到这个二维数组大致是如下得到的:$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这个二维数组呢? 按你的说法$data[0]下面就应该有9个值,或者更多..那么"用这第i行的两个值"是什么意思那如果是9个值是否是这9个值和前面的其它(0 i-1)其中的9个值完全相同才算"有"相同的结果值那 向我上面提到的$data[0][$i]----$date[4][$i],前一个方括号相当于列信息,而后面的$i相当于一个行信息。我上面所说的第i行对应的就是$i的值。我在上面少说明了一些情况: 这里面upcode和ditem两个字段是联合主键,如果说是判断的话 ,只要判断这两个主键是否完全相同即可,而不需要所有的信息都一样才判断为是一样的。我这里说明的是 每一行总共有五个字段,即五列。 怎么把你项目中的代码都列出来了,我尝试帮你归纳下问题.问题:有一数组,类似以下=====================//假设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);是不是这样? 向我上面提到的$data[0][$i]----$date[4][$i],前一个方括号相当于列信息,而后面的$i相当于一个行信息。我上面所说的第i行对应的就是$i的值。那你生成数组不该这样,应该是生成$data[$i][0]----$date[$i][4],这样的二维数组可直接用上述答案代码,其上述代码中显示或者判断的,0和1,改成你需要比较的两个upcode和ditem对应的序号,0和2即可 晕,贴快了最终需要的结果:================================//因为其它3行数据的a,b为相同值 $arr[0] = array("a"=>1,"b"=>2,"c"=>3); $arr[3] = array("a"=>2,"b"=>4,"c"=>4);是不是这样? 如果按照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两条一比较之后就不再显示了。 //假设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]不明白了 这样问题不就简洁了,不用绕那么多弯弯 。这个是显示相同 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); 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); 像我这种情况 是不是$arr这个二维数组需要动态的生成呢?请问如何去动态生成这个二维数组? 对的..要生成:$data[$i][0]----$date[$i][4],而不是$data[0][$i]----$date[4][$i], 键值可以省略,这样就是使用数字键值并自动+1$arr = array(); // 先初始化for($i = 5, $i < 9, $i+){ $arr[] = $i;}// 最后得到的数组是这样的:// $arr = array( 0 => 5, 1 => 6, 2 => 7, 3 => 8) 如何生成一个二维数组:result是查询结果,m是查询的列数,$j是行数,$i是列数while($row=mysql_fetch_row($result)){ for($i=0;$i<m;$i++) $data[$j][$i]=$row[i]; $j++;} 这个还是无法区分1sign 23,和1 sign23,可以$rs[rtrim($v['a'],'-').'-'.ltrim($v['b'],'-')]=1.===================================================================那我想问一问 如果是生成一个二维数组呢?该如何去生成?====================================================================这个是数据集处理最基本的操作。while($row=mysql_fetch_row($result)){ $data[] = $row;} print_r($data); Thanks!I'm really fool. 搜索结果排序问题 update 没报错,但数据没更新 怎么实现点击一个按钮出现浏览文件的窗口啊 去除重复的数据。 求字符(.)的正确用法 请教一下关于cms的选择 救急!!!HTTP_RAW_POST_DATA的问题…… 这样的警告怎么解决呀 大侠们 快救我呀!!!! 关于PHP与MYSQL连接的问题,请高手指点! 有要有关php各种手册的朋友有福了,本站提供高速下载!! 循环输出数据 同时每次还要查询数据库 [問題]PHP上傳CSV文件。
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] );
}
}
} ?>
这样不知道行不行,在网吧写的,呵呵...
<?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; // 不然会导致重复输出
}
}
} ?>。
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].' ,值2为'.$arr[$i][1];
echo '<hr />';
}
}
$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这个二维数组呢?
我在上面少说明了一些情况: 这里面upcode和ditem两个字段是联合主键,如果说是判断的话 ,只要判断这两个主键是否完全相同即可,而不需要所有的信息都一样才判断为是一样的。
我这里说明的是 每一行总共有五个字段,即五列。
有一数组,类似以下
=====================
//假设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);是不是这样?
================================
//因为其它3行数据的a,b为相同值
$arr[0] = array("a"=>1,"b"=>2,"c"=>3);
$arr[3] = array("a"=>2,"b"=>4,"c"=>4);是不是这样?
//因为其它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两条一比较之后就不再显示了。
//假设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]
不明白了
这个是显示相同 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);
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);
请问如何去动态生成这个二维数组?
键值可以省略,这样就是使用数字键值并自动+1$arr = array(); // 先初始化
for($i = 5, $i < 9, $i+){
$arr[] = $i;
}// 最后得到的数组是这样的:
// $arr = array( 0 => 5, 1 => 6, 2 => 7, 3 => 8)
result是查询结果,m是查询的列数,$j是行数,$i是列数
while($row=mysql_fetch_row($result)){
for($i=0;$i<m;$i++)
$data[$j][$i]=$row[i];
$j++;
}
可以$rs[rtrim($v['a'],'-').'-'.ltrim($v['b'],'-')]=1.
===================================================================
那我想问一问 如果是生成一个二维数组呢?
该如何去生成?
====================================================================
这个是数据集处理最基本的操作。
while($row=mysql_fetch_row($result)){
$data[] = $row;
}
print_r($data);
I'm really fool.