查看: 198|回复: 10

问个大神php问题

[复制链接]

45

主题

327

回帖

865

积分

高级会员

积分
865
发表于 2019-3-26 02:57:01 | 显示全部楼层 |阅读模式
用foreach取出的数据库结果被复盖了怎么办,只有最后一次的结果

如果不用 $aaa[]  这种形式,还有别的方法吗
回复

使用道具 举报

45

主题

327

回帖

865

积分

高级会员

积分
865
 楼主| 发表于 2019-3-26 06:38:29 | 显示全部楼层

orz2 发表于 2019-3-26 08:31

这个只是举例,实际的结果并不止fid一款,难道要全写进去吗

其实简单理解来说,就是多维数组变成 二维
如一个数组是这样的   $aaa[][]
新数组去掉中间的那个[]
变成   $aaa[]
回复

使用道具 举报

0

主题

1

回帖

4

积分

新手上路

积分
4
发表于 2019-3-26 08:08:55 | 显示全部楼层

yemingtu 发表于 2019-3-26 10:07

这个样子??


这样子果然可以,但它只能取出前面一条

源是这样的
$array = [[['a' => 1, 'b' => 2],['a' => 1, 'b' => 2]], [['a' => 1, 'b' => 2],['a' => 1, 'b' => 2]]];
想要变成
$array =[['a' => 1, 'b' => 2],['a' => 1, 'b' => 2],['a' => 1, 'b' => 2],['a' => 1, 'b' => 2]]; 本帖最后由 yemingtu 于 2019-3-26 13:50 编辑

围观者 发表于 2019-3-26 10:38

这样子果然可以,但它只能取出前面一条

源是这样的


那就这样,想去几层就加几层foreach循环,如果写成递归也行,有可能你的值是数组,要额外处理。
[ol]
  • $array = [[['a' => 1, 'b' => 2],['a' => 1, 'b' => 2]], [['a' => 1, 'b' => 2],['a' => 1, 'b' => 2]]];
  • $result = [];
  • foreach ($array as $item){
  •     foreach ($item as $item2){
  •         $result[] = $item2;
  •     }
  • }
  • print_r($result);[/ol]复制代码

    结果:
    [ol]
  • Array
  • (
  •     [0] => Array
  •         (
  •             [a] => 1
  •              => 2
  •         )
  •     [1] => Array
  •         (
  •             [a] => 1
  •              => 2
  •         )
  •     [2] => Array
  •         (
  •             [a] => 1
  •              => 2
  •         )
  •     [3] => Array
  •         (
  •             [a] => 1
  •              => 2
  •         )
  • )[/ol]复制代码
  • 回复

    使用道具 举报

    45

    主题

    327

    回帖

    865

    积分

    高级会员

    积分
    865
     楼主| 发表于 2019-3-26 08:50:00 | 显示全部楼层

    orz2 发表于 2019-3-26 06:38

    说需求


    Array
    (
        [0] => Array
            (
                [1] => Array
                    (
                        [fid] => 1
            )

        [1] => Array
            (
                [2] => Array
                    (
                        [fid] => 2
            )

    )


    变成


    Array
    (
                [1] => Array
                    (
                        [fid] => 1

                [2] => Array
                    (
                        [fid] => 2
    )


    怎么变
    回复

    使用道具 举报

    24

    主题

    1140

    回帖

    2402

    积分

    金牌会员

    积分
    2402
    发表于 2019-3-26 08:53:58 | 显示全部楼层
    好问帮顶。。。。。
    回复

    使用道具 举报

    45

    主题

    327

    回帖

    865

    积分

    高级会员

    积分
    865
     楼主| 发表于 2019-3-26 09:05:19 | 显示全部楼层
    啊,解决了
    依然循环取出就行了
    不知道还有什么好办法没

    foreach($mysql_return_data as $value){
       foreach($value as $v=>$k){
          $aa[] = $k;
       }
    }

    感谢大神回复
    回复

    使用道具 举报

    13

    主题

    243

    回帖

    609

    积分

    高级会员

    积分
    609
    发表于 2019-3-26 10:07:46 | 显示全部楼层
    说需求
    回复

    使用道具 举报

    13

    主题

    243

    回帖

    609

    积分

    高级会员

    积分
    609
    发表于 2019-3-26 10:11:00 | 显示全部楼层

    围观者 发表于 2019-3-26 08:08

    Array
    (
        [0] => Array
    [ol]
  • $aaa = [];
  • foreach($mysql_return_data as $v){
  • $aaa[$v['fid']] = $v;
  • }[/ol]复制代码
  • 回复

    使用道具 举报

    31

    主题

    855

    回帖

    1987

    积分

    金牌会员

    积分
    1987
    发表于 2019-3-26 10:38:00 | 显示全部楼层

    围观者 发表于 2019-3-26 08:50

    这个只是举例,实际的结果并不止fid一款,难道要全写进去吗

    其实简单理解来说,就是多维数组变成 二维


    这个样子??
    [ol]
  • $array = [[['a' => 1, 'b' => 2]], [['a' => 1, 'b' => 2]]];
  • $new_array = array_map(function ($item) {
  •     return $item[0];
  • }, $array);
  • var_dump($new_array);[/ol]复制代码

    结果:
    [ol]
  • array(2) {
  •   [0]=>
  •   array(2) {
  •     ["a"]=>
  •     int(1)
  •     ["b"]=>
  •     int(2)
  •   }
  •   [1]=>
  •   array(2) {
  •     ["a"]=>
  •     int(1)
  •     ["b"]=>
  •     int(2)
  •   }
  • }[/ol]复制代码
  • 回复

    使用道具 举报

    31

    主题

    855

    回帖

    1987

    积分

    金牌会员

    积分
    1987
    发表于 2019-3-26 13:49:08 | 显示全部楼层
    本帖最后由 yemingtu 于 2019-3-26 13:50 编辑

    围观者 发表于 2019-3-26 10:38

    这样子果然可以,但它只能取出前面一条

    源是这样的


    那就这样,想去几层就加几层foreach循环,如果写成递归也行,有可能你的值是数组,要额外处理。
    [ol]
  • $array = [[['a' => 1, 'b' => 2],['a' => 1, 'b' => 2]], [['a' => 1, 'b' => 2],['a' => 1, 'b' => 2]]];
  • $result = [];
  • foreach ($array as $item){
  •     foreach ($item as $item2){
  •         $result[] = $item2;
  •     }
  • }
  • print_r($result);[/ol]复制代码

    结果:
    [ol]
  • Array
  • (
  •     [0] => Array
  •         (
  •             [a] => 1
  •              => 2
  •         )
  •     [1] => Array
  •         (
  •             [a] => 1
  •              => 2
  •         )
  •     [2] => Array
  •         (
  •             [a] => 1
  •              => 2
  •         )
  •     [3] => Array
  •         (
  •             [a] => 1
  •              => 2
  •         )
  • )[/ol]复制代码
  • 回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关注公众号

    相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

    Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

    在本版发帖
    关注公众号
    返回顶部