数组的处理,有什么好办法?

lndsqzll 2007-02-08 08:50:14
$a = array( 1=>'a',2=>'a',4=>'a' );
$b = array( 1=>'b',2=>'b',3=>'b' );
$c = array( 3=>'c' );

假设有以上三个数组(可能更多数组),每个数组存放不同的信息。键值代表行数,值代表错误信息。
我想按照顺序这样输出:
1行:a错误
1行:b错误
2行:a错误
2行: b错误
3行: b错误
3行: c错误
4行: a错误

如果用array_merge($a,$b,$c)合并数组的话,键值会改变,行的信息就不对了。如果$a+$b+$c的话,一样键值又的不会放到一个数组中。
有什么办法吗?
...全文
351 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lndsqzll 2007-02-08
  • 打赏
  • 举报
回复
还想问个问题:

在上述这个问题中,如果数组$a中各行出现过错误,后面$b,$c中该行出现的错误便不再显示。
即结果为:
1行:a错误
2行:a错误
3行: b错误
3行: c错误
4行: a错误

这个在上面的函数中怎么实现呢?谢谢啦**
lndsqzll 2007-02-08
  • 打赏
  • 举报
回复
唉,我怎么就没想到用你这种方法呢,真的很简单。
努力学习!
lndsqzll 2007-02-08
  • 打赏
  • 举报
回复
谢谢唠叨,我刚才想了个笨方法。不过还好用。呵呵

$a = array( 1=>'a',2=>'a',4=>'a' );
$b = array( 1=>'b',2=>'b',3=>'b' );
$c = array( 3=>'c' );
$ak = array_keys( $a );
$bk = array_keys( $b );
$ck = array_keys( $c );

$av = array_values( $a );
$bv = array_values( $b );
$cv = array_values( $c );

$k = array_merge( $ak,$bk,$ck );
$v = array_merge( $av,$bv,$cv );

asort( $k );
foreach( $k as $key=>$value )
{
print( $value.'行:'.$v[$key].'错误<br />' );
}
xuzuning 2007-02-08
  • 打赏
  • 举报
回复
function foo() {
$t = array();
foreach(func_get_args() as $r) {
foreach($r as $k=>$v) {
$t[$k][] = $v;
}
}
ksort($t);
foreach($t as $k=>$r) {
foreach($r as $v) {
printf('%s行:%s错误<br>', $k, $v);
}
}
}

$a = array( 1=>'a',2=>'a',4=>'a' );
$b = array( 1=>'b',2=>'b',3=>'b' );
$c = array( 3=>'c' );

foo($a, $b, $c);
lndsqzll 2007-02-08
  • 打赏
  • 举报
回复
呵呵,不好意思!!!

谢谢 xuzuning(唠叨) && foolbirdflyfirst(湖水清澈)

:)
foolbirdflyfirst 2007-02-08
  • 打赏
  • 举报
回复
ft~也不一次性说完需求
那得加判断了
$a = array( 1=>'a',2=>'a',4=>'a');
$b = array( 1=>'b',2=>'b',3=>'b' );
$c = array( 3=>'c' );
function foo()
{
$d=array();
$argsArray = func_get_args();
foreach($argsArray as $args)
{
foreach($args as $key=>$value)
{
if($args == $argsArray[0])
{
array_push($d,$key."行:".$value."错误");
}
else
{
array_key_exists($key,$argsArray[0]) ? '' : array_push($d,$key."行:".$value."错误");
}
}
}
asort($d);
return $d;
}
$m =foo($a,$b,$c);//第一个参数必须是$a
echo implode('<br>',$m);
lndsqzll 2007-02-08
  • 打赏
  • 举报
回复
array_unique()不是移除数组中重复的值吗?
可是现在没有重复的值啊。
foolbirdflyfirst 2007-02-08
  • 打赏
  • 举报
回复
$m = array_unique(foo($a,$b,$c));
echo implode('<br>',$m);
lndsqzll 2007-02-08
  • 打赏
  • 举报
回复
foolbirdflyfirst(湖水清澈)你好:
刚才运行了你的程序,结果还是
1行:a错误
1行:b错误
2行:a错误
2行: b错误
3行: b错误
3行: c错误
4行: a错误
而不是:
1行:a错误
2行:a错误
3行: b错误
3行: c错误
4行: a错误
即:数组$a中各行的错误,如果在后面的数组中该行还有其它错误,不显示。
foolbirdflyfirst 2007-02-08
  • 打赏
  • 举报
回复
套用唠叨的思路,改一下即可
$a = array( 1=>'a',2=>'a',4=>'a' );
$b = array( 1=>'b',2=>'b',3=>'b' );
$c = array( 3=>'c' );
function foo()
{
$d=array();
foreach(func_get_args() as $r)
{
foreach($r as $key=>$value)
{
array_push($d,$key."行:".$value."错误");
}
}
asort($d);
return $d;
}
$m = foo($a,$b,$c);
echo implode('<br>',$m);

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧