求大神解答PHP foreach问题

求大神解答PHP foreach问题,第1张

在foreach外面先设置一个变量,比如:$i=0,然后在foreach里面使用类似:

(++$i==1)  $str:'';

这样的语句来判断(这是三元运算符,不会的话也可以用if else来判断,效果是一样的),是否是循环的第一重;

$str的内容就是

<td rowspan="<php count($v); >"><php echo $value['custmerName'];></td>;

这些代码片段你自己组织一下,因为不是IDE写出来的,所以可能有语法错误。你自己整理一下吧

$newList = array();
foreach ($list as $v) {  // $list 是你以前的数组
    if (!isset($newList[$v['id']])) {  // 如果新列表中还没有相应的id
        $person = array('id'=> $v['id'], 'name'=>array($v['name'])), 'price'=>array($v['price'])));
        $newList[$v['id']] = $person;
        unset($person);
    } else {  // 如果已经存过,就只在该组下进行添加
        $newList[$v['id']]['name'][] = $v['name'];
        $newList[$v['id']]['price'][] = $v['price'];
    }
}
$newList = array_values($newList);  // 去掉索引

大概这么个意思,你试试,有什么问题我再改

<php
$list = array
  (
  array("a",1,11),
  array("b",2,12),
  array("c",3,13),
  array("d",4,14)
  );
echo "name:"$list[0][0]": value1:"$list[0][1]", value11:"$list[0][2]"<br>";
echo "name:"$list[1][0]": value2:"$list[1][1]", value12:"$list[1][2]"<br>";
echo "name:"$list[2][0]": value3:"$list[2][1]", value13:"$list[2][2]"<br>";
echo "name:"$list[3][0]": value4:"$list[3][1]", value14:"$list[3][2]"<br>";
>

大概思路就是,先任意取第一个值,然后循环和剩下的所有值比较,如果相等,$i++;再取第二个不等于第一个的值的值,继续循环比较,记录循环次数。然后就OK了,主要就是循环、比较,记录循环次数

<php
function array_unique_fb($array2D){
foreach ($array2D as $v){
$v = join(",",$v); //降维,也可以用implode,将一维数组转换为用逗号连接的字符串
$temp[] = $v;
}
$temp = array_unique($temp); //去掉重复的字符串,也就是重复的一维数组
foreach ($temp as $k => $v){
$temp[$k] = explode(",",$v); //再将拆开的数组重新组装
}
return $temp;
}
$aa = array(
array('id' => 123, 'name' => '张三'),
array('id' => 123, 'name' => '李四'),
array('id' => 124, 'name' => '王五'),
array('id' => 123, 'name' => '李四'),
array('id' => 126, 'name' => '赵六')
);
$bb=array_unique_fb($aa);
print_r($bb)
>
显示结果:Array ( [0] => Array ( [0] => 123 [1] => 张三 ) [1] => Array ( [0] => 123 [1] => 李四 ) [2] => Array ( [0] => 124 [1] => 王五 ) [4] => Array ( [0] => 126 [1] => 赵六 ) )
百度一下就找到答案了

直接用 array_flip 或者 array_unique 是不行的,你这没有键名,必须要自己写函数

<php
function unique_arr($array2D,$stkeep=false,$ndformat=true)
{
    // 判断是否保留一级数组键 (一级数组键可以为非数字)
    if($stkeep) $stArr = array_keys($array2D);
    // 判断是否保留二级数组键 (所有二级数组键必须相同)
    if($ndformat) $ndArr = array_keys(end($array2D));
    //降维,也可以用implode,将一维数组转换为用逗号连接的字符串
    foreach ($array2D as $v){
        $v = join(",",$v);
        $temp[] = $v;
    }
    //去掉重复的字符串,也就是重复的一维数组
    $temp = array_unique($temp);
    //再将拆开的数组重新组装
    foreach ($temp as $k => $v)
    {
        if($stkeep) $k = $stArr[$k];
        if($ndformat)
        {
            $tempArr = explode(",",$v);
            foreach($tempArr as $ndkey => $ndval) $output[$k][$ndArr[$ndkey]] = $ndval;
        }
        else $output[$k] = explode(",",$v);
    }
    return $output;
}
$arr = array(
    0 => array
    (
        0 => 1,
        1 => 2
    ),
    1 => array
    (
        0 => 1,
        1 => 2
    ),
    2 => array
    (
        0 => 2,
        1 => 3
    ),
    3 => array
    (
        0 => 2,
        1 => 3
    ),
    4 => array
    (
        0 => 3,
        1 => 4
    ),
    5 => array
    (
        0 => 3,
        1 => 4
    ),
);
var_dump( array_values(unique_arr( $arr )) );

去重函数可参考: >


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13380159.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-25
下一篇 2023-07-25

发表评论

登录后才能评论

评论列表(0条)

保存