Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.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
Arrays 是否有一种普遍接受的方法向数组元素添加元信息,以指示如何处理它们?_Arrays_Metadata_Element - Fatal编程技术网

Arrays 是否有一种普遍接受的方法向数组元素添加元信息,以指示如何处理它们?

Arrays 是否有一种普遍接受的方法向数组元素添加元信息,以指示如何处理它们?,arrays,metadata,element,Arrays,Metadata,Element,我使用的是一个数组,其中包含数据库查询的结果,该查询后来被格式化为html(用于Web应用程序)或csv(用于在电子表格中导入)。 我想将信息附加到数组元素,其中包含有关如何使用此元素的数据的其他信息 例如,数组元素数据 。。。可以显示为链接:然后我希望附加链接信息。从数组创建html的代码可以使用它创建链接 。。。是格式为2009-09-14的日期:然后我想以某种方式将其标记为日期。如果使用的是html页面,则可以显示更漂亮的页面,例如Mo Sep 14或Today;如果收件人是csv,最好

我使用的是一个数组,其中包含数据库查询的结果,该查询后来被格式化为html(用于Web应用程序)或csv(用于在电子表格中导入)。 我想将信息附加到数组元素,其中包含有关如何使用此元素的数据的其他信息

例如,数组元素数据

  • 。。。可以显示为链接:然后我希望附加链接信息。从数组创建html的代码可以使用它创建链接
  • 。。。是格式为
    2009-09-14
    的日期:然后我想以某种方式将其标记为日期。如果使用的是html页面,则可以显示更漂亮的页面,例如Mo Sep 14或Today;如果收件人是csv,最好离开它
有解决这个问题的最佳实践方法吗

我确实想到了几种可能的解决方案,但我想问问是否有人已经知道“最佳实践”。从最好到最坏:

  • 将每个数组元素存储为自定义创建的对象(日期、可链接、文本…),而不是将数组元素存储为文本。可能提供默认的
    .to_string()
    方法
  • 将每个数组元素设为散列,这样我就可以说
    a[5][7][text']
    a[5][7][link']
  • 制作不同版本的数组,例如
    textArray[5][7]
    linkArray[5][7]
  • 创建html作为一个开始,仅仅使用文本版本似乎是一个坏主意,因为外观根据使用情况而有所不同(例如2009-09-14 vs Mo-Sep 14)


    或者我只是问了一个错误的问题?

    除非您指定一种语言,(1)和(2)基本相同。对象或散列,除了语法之外,动态编程语言还有什么区别?在卢阿,一切都是字典

    (1) /(2)通常优于(3),因为它们通常使复制元素及其元数据更容易。例如,在排序时


    因此,在不特定于语言/环境的情况下,在没有任何特殊条件的情况下,最佳实践是以某种方式组合元数据和元素,并处理生成的数据类型。您可以通过定义一个包含这两个元素的新类、定义一个或多个原始元素类型的子类、使用泛型对、使用通用字典或仅将元数据存储在原始对象中来实现这一点(这在Javascript中是显而易见的方法).

    作为一般建议,最好数据中不包含任何关于如何表示自身的信息

    相反,应用程序中创建表示的部分应该在单独的数据结构中具有这些设置。可以将其视为一个XML文件和创建不同表示的各种XSLT文件

    但是,如果不可能,或者必须将两个信息合并到一个数据结构中进行实际转换,我遵循以下经验法则:

    不要太聪明,用你的语言做最自然的事

    • 在Java和Delphi中,我总是使用“custom object”变体,因为它具有某些优点,比如编译时检查
    • 在PHP中,我总是使用哈希,因为它更像PHP风格

    我有时会做“解决方案3”,但我总是后悔。这些结构往往会成为维护的噩梦,从数据角度和编码角度来看,您很可能会遇到同步问题。

    web框架中的一种常见方法是将记录映射到对象上:将数据库中的一条记录读入一个对象,因此您的结果是一个对象数组。对于不同的表,您需要不同的类。这是许多web框架中使用的模型-视图-控制器(MVC)模式的构建块之一

    例如,在RubyonRails中,表
    users
    由类
    User
    处理。您可以使用脚手架创建这两个对象

    ruby script\generate scaffold user lastname:string link:string joined:date
    
    Date、Boolean、String、Text、Decimal和Integer在这里是不同的数据类型。不幸的是,URL不是,所以我必须使用字符串作为链接

    您可以如下方式从数据库读取用户:

    @u = User.find(77)       # gives you one object
    @list = User.find(:all)  # gives you an array of User-objects
    
      <h1>Listing Users</h1>
      <table>
        <tr>
          <th>Lastname</th>
          <th>Link</th>
          <th>Joined on</th>
        </tr>
      <% @list.each do |user| %>
        <tr>
          <td><%=h user.lastname %></td>
          <td><%= link_to "Homepage", user.link %></td>
          <td><%=h user.joined %></td>
        </tr>
      <% end %>
      </table>
    
    用户对象的属性具有处理日期、数字等的正确类型:

    如果100.days.ago<@u.join,那么

    数据固有的逻辑在用户类中实现

    用户列表可以使用如下视图以HTML格式显示:

    @u = User.find(77)       # gives you one object
    @list = User.find(:all)  # gives you an array of User-objects
    
      <h1>Listing Users</h1>
      <table>
        <tr>
          <th>Lastname</th>
          <th>Link</th>
          <th>Joined on</th>
        </tr>
      <% @list.each do |user| %>
        <tr>
          <td><%=h user.lastname %></td>
          <td><%= link_to "Homepage", user.link %></td>
          <td><%=h user.joined %></td>
        </tr>
      <% end %>
      </table>
    
    列出用户
    姓氏
    链接
    加入
    
    显示数据所固有的逻辑在视图中实现。 将对象的哪个属性视为链接或普通文本的知识存在于视图中,而不是对象本身


    通过创建一个cvs视图来显示/输出与cvs相同的数据。

    一个数组。。。在编程语言中?你说的是哪种编程语言?非常感谢,它们都有不同的方面,这很有价值!我最终使用一个对象来存储信息。但正如DR所建议的那样,不包括任何关于如何表现自己的信息,而是让接收者决定,因为他们知道对象的类别。一个例外是为了方便起见添加的_toString(),作为默认文本表示形式,“他的生日是$date”。顺便说一句,我使用的语言是PHP,我认为只要支持“常用”结构(数组、哈希、类),这就不那么重要了。不过,我没有使用ORM映射(LaRails)。“如果数据中根本不包含关于如何表示自身的信息,那就最好了”——不过,我认为URL是可以的。我确实认为,如果字符串要显示给用户,to_字符串开始测试对象的合理责任限制。如果没有