dever преди 6 години
родител
ревизия
29556bed4f
променени са 1 файла, в които са добавени 47 реда и са изтрити 20 реда
  1. 47 20
      src/Database.php

+ 47 - 20
src/Database.php

@@ -1335,6 +1335,9 @@ class Database
                 $i++;
                 $j = 0;
                 foreach ($data as $ki => $vi) {
+                    if (!isset($vi[$k])) {
+                        $vi[$k] = '';
+                    }
                     if (isset($vi[$k])) {
                         $value = $vi[$k];
 
@@ -1342,26 +1345,7 @@ class Database
                             $value = $this->value($v['list'], $data[$ki], $config['struct']);
                         }
                         if (isset($v['option'])) {
-                            $v['option'] = $this->option($v['option']);
-
-                            if (strstr($value, ',')) {
-                                $temp = explode(',', $value);
-                                $t = array();
-                                foreach ($temp as $vv) {
-                                    if (isset($v['option'][$vv]) && is_array($v['option'][$vv])) {
-                                        $t[] = $v['option'][$vv]['name'];
-                                    } else {
-                                        $t[] = $vv;
-                                    }
-                                }
-                                $value = implode("\r\n", $t);
-                            } elseif (isset($v['option'][$value])) {
-                                if (is_array($v['option'][$value])) {
-                                    $value = $v['option'][$value]['name'];
-                                } else {
-                                    $value = $v['option'][$value];
-                                }
-                            }
+                            $value = $this->getOptionValue($value, $v);
                         }
 
                         //$value = mb_convert_encoding($value,'gb2312','utf-8');
@@ -1376,6 +1360,49 @@ class Database
         Dever::excelExport($body, $header, $file);
     }
 
+    private function getOptionValue($value, $v)
+    {
+        # 验证option是否是匿名函数
+        $v['option'] = $this->option($v['option']);
+        # 位运算
+        if (isset($v['bit'])) {
+            $ts = array();
+            foreach ($v['option'] as $tm => $tv) {
+                if (isset($v['bit'][$tm]) && ($value & $tm) > 0) {
+                    $ts[] = $tv;
+                }
+            }
+            $value = implode(',', $ts);
+        }
+        if ((isset($v['child_name']) || (isset($v['show']) && is_string($v['show'])))) {
+            if (isset($v['option'][$value]) && is_array($v['option'][$value])) {
+                $value = $v['option'][$value]['name'];
+            } else {
+                $value = isset($v['option'][$value]) ? $v['option'][$value] : $value;
+            }
+        } else {
+            if (strstr($value, ',')) {
+                $temp = explode(',', $value);
+                $t = array();
+                foreach ($temp as $vv) {
+                    if (isset($v['option'][$vv]) && is_array($v['option'][$vv])) {
+                        $t[] = $v['option'][$vv]['name'];
+                    } elseif(isset($v['option'][$vv])) {
+                        $t[] = $v['option'][$vv];
+                    } else {
+                        $t[] = $vv;
+                    }
+                }
+                $value = implode("\r\n", $t);
+            } elseif (isset($v['option'][$value]) && is_array($v['option'][$value])) {
+                $value = $v['option'][$value]['name'];
+            } else {
+                $value = isset($v['option'][$value]) ? $v['option'][$value] : $value;
+            }
+        }
+        return $value;
+    }
+
     private function _getChr($start, $num)
     {
         $num = $start + $num;