Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:以特定顺序和特定条件显示2D数组?_Php_Arrays_Multidimensional Array_Foreach_Nested Loops - Fatal编程技术网

PHP:以特定顺序和特定条件显示2D数组?

PHP:以特定顺序和特定条件显示2D数组?,php,arrays,multidimensional-array,foreach,nested-loops,Php,Arrays,Multidimensional Array,Foreach,Nested Loops,我有一个数据库,它有四个表,为了简单起见,我将它们称为表1,表2,表3,表4 每个表都有不同的信息,但它们都共享一个唯一的id,sessionid 我已经通过PHP数组中的PHPMyAdmin导出了所有四个表。这给了我一个名为mydomain.php的文件 其中,数据结构如下所示: $table1 = array( array('id'=>1,'sessionid'=>'12','field1_1'=>'data','field2_1'=>'data','field3

我有一个数据库,它有四个表,为了简单起见,我将它们称为表1表2表3表4

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

我已经通过PHP数组中的PHPMyAdmin导出了所有四个表。这给了我一个名为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可能不同),我希望检查第一个表中的字段“done”是否设置为1或0,并跳过其中为空或包含“
NULL
”的字段

我尝试过一些不同的方法,比如相互嵌套的foreach循环,但似乎不太管用

希望你能帮助解决这个问题

真诚的

-Mestika

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

  • 使用JOIN语句合并四个表的内容
  • 使用SELECT语句检索字段[done]
  • 使用WHERE筛选空字符串和空值
最后,使用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资源:

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

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

      • 使用JOIN语句合并四个表的内容
      • 使用SELECT语句检索字段[done]
      • 使用WHERE筛选空字符串和空值
      最后,使用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资源:

      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
      

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

          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);
                   }
                }
             }
          }
          

          我没有测试它,我只是简单地写了下来,希望没有打字错误。

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

          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);
                   }
                }
             }
          }
          
          我没有测试,我只是简单地写了下来,希望没有打字错误