【问题标题】:PHP: Display 2D arrays in a specific order and with certain conditions?PHP:以特定顺序和特定条件显示二维数组?
【发布时间】:2012-02-14 14:46:47
【问题描述】:

我有一个有四个表的数据库,为了简单起见,我将它们称为table1、table2、table3、 table4

每个表都有不同的信息,但它们都共享一个唯一的 id,sessionid。

我已经通过我的 PHPMyAdmin 在 PHP 数组中导出了所有四个表。这给了我一个名为 mydomain.php 的文件。

这里面的数据结构是这样的:

$table1 = array(
  array('id'=>1,'sessionid'=>'12','field1_1'=>'data','field2_1'=>'data','field3_1'=>'data, 'done'=>1),
  array('id'=>2,'sessionid'=>'13','field1_1'=>'data','field2_1'=>'data','field3_1'=>'data, 'done'=>0)
);

$table2 = array(
  array('id'=>4,'sessionid'=>'12','field1_2'=>'data','field2_2'=>'data','field3_2'=>'data),
  array('id'=>6,'sessionid'=>'13','field1_2'=>'data','field2_2'=>'data','field3_2'=>'data)
);

$table3 = array(
  array('id'=>2,'sessionid'=>'12','field1_3'=>'data','field2_3'=>'data','field3_3'=>'data),
  array('id'=>5,'sessionid'=>'13','field1_3'=>'data','field2_3'=>'data','field3_3'=>'data)
);

$table4 = array(
  array('id'=>6,'sessionid'=>'12','field1_4'=>'data','field2_4'=>'data','field_43'=>'data),
  array('id'=>1,'sessionid'=>'13','field1_4'=>'data','field2_4'=>'data','field3_4'=>'data)
);

我希望根据他们的会话 id 显示它们(如您所见,每个表的 id 可能会有所不同),并且我想检查第一个表中的字段“完成”是否设置为 1 或 0并跳过空字段或其中包含“NULL”的字段。

我尝试了一些不同的方法,例如相互嵌套的 foreach 循环,但我似乎不太奏效。

希望您能帮助解决这个问题。

真诚
- 梅斯蒂卡

【问题讨论】:

    标签: php arrays multidimensional-array foreach nested-loops


    【解决方案1】:

    为什么不使用 SQL?这种语言就是为了做这样的事情而设计的。

    • 使用JOIN语句合并四个表的内容。
    • 使用 SELECT 语句检索字段 [done]。
    • 使用 WHERE 过滤空字符串和 NULL 值。

    最后,使用 PHP 和 mySQL 功能直接检索表值,而不是使用 phpMyAdmin 导出数据。

    示例 SQL 语句:

    SELECT t1.sessionid, t1.done
    FROM table1 AS t1
    JOIN table2 AS t2 ON t1.sessionid = t2.sessionid
    JOIN table3 AS t3 ON t2.sessionid = t3.sessionid
    JOIN table4 AS t4 ON t3.sessionid = t4.sessionid
    WHERE t1.done IS NOT NULL
    

    PHP 资源:

    【讨论】:

      【解决方案2】:

      这不是最有效的解决方案,但它是直截了当的..

      foreach ($table1 as $data) {
         if ($data['done']===0 || $data['done']===1) {
            print_r($data);
            echo "Data table 2:";
            foreach ($table2 as $data2) {
               if ($data2['sessionid']===$data['sessionid']){
                  print_r($data2);
               }
            }
            echo "Data table 3:";
            foreach ($table3 as $data3) {
               if ($data3['sessionid']===$data['sessionid']){
                  print_r($data3);
               }
            }
            echo "Data table 4:";
            foreach ($table4 as $data4) {
               if ($data3['sessionid']===$data['sessionid']){
                  print_r($data4);
               }
            }
         }
      }
      

      我没有测试,我只是简单地写了下来,希望没有错别字..

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-01
        • 1970-01-01
        • 2011-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多