二维数组的复杂遍历 根据二维数组再遍历 希望结果还是二维数组

山东小常 发布于 2013/04/22 16:47
阅读 426
收藏 0
PHP


数组一
Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 2
        )


    [1] => Array
        (
            [0] => 3
            [1] => 4
            [2] => 5
        )


)

根据数组一里的值 到数据库里的一个表里查询(数组一里的值是该表的外键 例如:id:1 name:本帮江浙菜 tid:1)
想得到下面的结果,该如何遍历数组一


Array
(
[0]=>array(
     [0] => Array
      (
          [st_id] => 1
          [st_name] => 本帮江浙菜
      )

    [1] => Array
      (
            [st_id] => 2
            [st_name] => 粤菜
        )
)
[1]=>array(
     [0] => Array
       (
           [st_id] => 3
           [st_name] => 自助餐
       )

    [1] => Array
       (
           [st_id] => 4
           [st_name] => 川湘菜
       )

    [2] => Array
       (
           [st_id] => 5
           [st_name] => 火锅/干锅
       )
)
)
请教各位大牛
加载中
0
飞晏
飞晏

1. 为了减少数据库查询,在数据量不是很大的情况下,首先查询出表中所有的数据,并且以外键为key生成1个数组$tempArr。

2. 代码,大致就是这么个流程

//$tempArr = 第一步查询好的数组。
foreach( $arr1 as $tArr ){
    foreach( $tArr as &$v ){
        $v = array('st_id'=>$v,'st_name'=>$tempArr[$v]['st_name']);
    }
}

山东小常
山东小常
回复 @飞晏 : 表太长了 我给你写一个吧 截图也不好截 第一个表 Res_id Res_name Dis_id 1 小南国 1,2 2 怡乡春竹 杨浦店 3,4,5 第二个表 St_id St_name St_stid 1 本帮江浙菜 0 2 粤菜 0 3 自助餐 0 4 川湘菜 0 5 火锅/干锅 0 表一中dis_id截断字符串成数组后 是表二st_id的外键
飞晏
飞晏
回复 @山东小常 : 表和代码发来...
山东小常
山东小常
不成功啊
0
山东小常
山东小常

引用来自“飞晏”的答案

1. 为了减少数据库查询,在数据量不是很大的情况下,首先查询出表中所有的数据,并且以外键为key生成1个数组$tempArr。

2. 代码,大致就是这么个流程

//$tempArr = 第一步查询好的数组。
foreach( $arr1 as $tArr ){
    foreach( $tArr as &$v ){
        $v = array('st_id'=>$v,'st_name'=>$tempArr[$v]['st_name']);
    }
}

表太长了 我给你写一个吧  截图也不好截

第一个表

Res_id

Res_name

Dis_id

1

小南国

1,2

2

怡乡春竹 杨浦店

3,4,5

第二个表

St_id

St_name

St_stid

1

本帮江浙菜

0

2

粤菜

0

3

自助餐

0

4

川湘菜

0

5

火锅/干锅

0

表一中dis_id截断字符串成数组后 是表二st_id的外键

0
飞晏
飞晏

引用来自“山东小常”的答案

引用来自“飞晏”的答案

1. 为了减少数据库查询,在数据量不是很大的情况下,首先查询出表中所有的数据,并且以外键为key生成1个数组$tempArr。

2. 代码,大致就是这么个流程

//$tempArr = 第一步查询好的数组。
foreach( $arr1 as $tArr ){
    foreach( $tArr as &$v ){
        $v = array('st_id'=>$v,'st_name'=>$tempArr[$v]['st_name']);
    }
}

表太长了 我给你写一个吧  截图也不好截

第一个表

Res_id

Res_name

Dis_id

1

小南国

1,2

2

怡乡春竹 杨浦店

3,4,5

第二个表

St_id

St_name

St_stid

1

本帮江浙菜

0

2

粤菜

0

3

自助餐

0

4

川湘菜

0

5

火锅/干锅

0

表一中dis_id截断字符串成数组后 是表二st_id的外键

不好意思,foreach第一层循环少了个引用:


$tempArr = array(
    '1' => array('St_name'=>'本帮江浙菜'),
    '2' => array('St_name'=>'粤菜'),
    '3' => array('St_name'=>'自助餐'),
    '4' => array('St_name'=>'川湘菜'),
    '5' => array('St_name'=>'火锅/干锅'),
);
$arr1 = array(
    array(1,2),
    array(3,4,5),
);
foreach( $arr1 as &$tArr ){
    foreach( $tArr as &$v ){
        $v = array('st_id'=>$v,'St_name'=>$tempArr[$v]['St_name']);
    }
}
print_r($arr1);


Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [st_id] => 1
                    [St_name] => 本帮江浙菜
                )

            [1] => Array
                (
                    [st_id] => 2
                    [St_name] => 粤菜
                )

        )

    [1] => Array
        (
            [0] => Array
                (
                    [st_id] => 3
                    [St_name] => 自助餐
                )

            [1] => Array
                (
                    [st_id] => 4
                    [St_name] => 川湘菜
                )

            [2] => Array
                (
                    [st_id] => 5
                    [St_name] => 火锅/干锅
                )

        )

)


山东小常
山东小常
回复 @飞晏 : 嗯 好的 可以交个朋友吗 我QQ 1063510260 方便的话加一下 别忘了验证信息填一个名字我备注 叫我阿长就可以
飞晏
飞晏
回复 @山东小常 : 客气了,不想用引用,把结果放到1个新数组也是可以的~
山东小常
山东小常
嗯 没事 你那么热心的帮助 我就很感谢了 谢谢了 祝你快乐
返回顶部
顶部