我的第一篇文章!似乎这是明智的地方;) 我目前正在进行一些测试中,我第一次尝试尝试使用MPTT(修改的预订树遍历)方法将数据存储在我的MySQL数据库中. 的帮助. 但是,我试图找到最以性能的方式,以特定的父母在特定级别上获取所有列表元素. 如果父母输入的父母将被命名为" bilar",则可以转化为从下图中获取Saab和Chrysler的类别. (这意味着瑞典的汽车,如果这不是您最强的一面;) ) 由于我无法发布图像,这是流程图的链接:目前,我一直在做两个查询来完成我想做的事情,并在同一级别上吐出所有其他元素来计算级别. 有更好的方法可以做到这一点,并希望仅使用一个查询? 非常感谢! 解决方案 我确定这可以优化,但是假设您拥有"名称"," LFT"和" RGT",以下内容将为您提供" Bilar"的2级兄弟姐妹. SELECT node.name,
以下是关于 data-structures 的编程技术问答
我想知道创建一个小库的优点,可能是为了个人用途,其中指定了一些数据结构,例如链接列表,树(二进制,AVL等...),Hash查找表等. 其中一些将建立在本机PHP阵列的顶部,因为它的作用与许多类型一样,有些可能不会. 我的问题确实是,构建这些类别中的任何一个是否有意义 - 尤其是那些可能不基于本机数组的类别?我在这里谈论的是计算实用性,并且不想特别想进入动态与打字语言论点(我仍然有兴趣听到有关该主题的有趣和相关的内容). 当我们使用基本数组的C实现时,使用类构建这些(可能更有效的,逻辑上)的数据结构是否疯狂? 谢谢.. 解决方案 已经有/book.spl.php 可能涵盖您想要的东西,但是如果建造这些内容对您来说很有趣,并提高了您的PHP/常规编码技能,那么我认为这是一个很好的主意. 也可能是一个很好的图书馆,可以向更广泛的受众发布,并且可以放在您的简历上. 其他解决方案 看看SPL /a> 并阅读Matthew Turland的
我正在基于我从某个地方获取的一些数据来创建PHP数据结构. 如果我会用一些标准容器编码此信息,例如XML或JSON,我将使用此结构: [ {'name': 'Lupin', 'age': '13'}, {'name': 'Igor', 'age': '24'}, ... ]; 但是,我有点不确定在PHP中使用什么(数组的数组与对象的数组). 一件事是,我真的不太在乎可读性,但是我希望能够对这个数组进行分类(这可能很大).例如,我可能想为最大年龄或其他东西进行排序. 那么,我应该在PHP中使用什么结构?我希望大部分的性能比较. 解决方案 @Temporary表:MySQL确实允许通过CREATE TEMPORARY TABLE创建临时表.这些表仅在当前连接中可见,因此请确保不使用持久连接;) 其他解决方案 尽管阵列是最直接的方法,但不要忘记 SPL数据架构.根据用例,它们的性能比数组更好. 另外,我建议不要对性能过多思考,直到它开始以负面影
这是$s = array ('etc'=>'etc', 'fields' => array ( 0 => array ( 'name'=>'year', 'description'=>'Year of ...', 'type'=>'integer', ), 1 => array ( 'name'=>'label', 'description'=>'Offical short name', type'=>'string', ), 2 => array ( 'name' => 'xx', 'description' => 'Xx ...', 'type' => 'string', ) )); 这是一种非特殊方法(或"不是那么优雅的方式"),将大型数组减少到只有一个列的简单数组: : $fields = array(); foreach ($strut['resources'][0]['schema']['fields'] as $r) $fields[] = $r[
我想构建在PHP中实现的堆栈.最初我有此代码: class Stack { protected $stack; protected $limit; public function __construct($limit = 10) { // initialize the stack $this->stack = array(); // stack can only contain this many items $this->limit = $limit; } public function push($item) { // trap for stack overflow if (count($this->stack) limit) { // prepend item to the start of th
我已经习惯了HashSets,ArrayLists和其他Collections的Java.但是我现在正在从事一个PHP项目. 我需要创建一个集合,用对象(在这种情况下的字符串)填充该集合,但是该集合只能包含每个对象一次.此外,如果存在,我想从该集合中删除某个对象. Java Collection课程将非常容易.但是如何在PHP中实现? 我缺少任何array()的方法吗?我正在使用PHP 5.3. 解决方案 如果只是字符串,则可以使用数组作为集: $arr['str1'] = null; $arr['str2'] = null; $arr['str1'] = null; print_r(array_keys($arr)); 您只有潜在的问题是,如果可能的话,数字字符串被隐式转换为整数.但这通常不是PHP的问题,因为在大多数情况下类型都不重要. 其他解决方案 php文档说: PHP中的数组实际上是有序的地图.地图是一种类型 将值与密钥相关联.这种
在寻求扩展我的编程能力时,我始终将其深入研究我了解它们的工作方式...但是我无法想象我们需要它的原因,或者更好的是SplDoublyLinkedList的实际例子,因为我们已经在php中进行了索引和关联阵列. 链接列表如何通常用于PHP? 解决方案 SPL数据结构降低了内存消耗并提高性能.很好的解释: 数据结构本质上是与语言无关的,并且作为基于数学的一组逻辑概念存在.这些容器使用不同的算法适合提高效率. 例如,如果您不需要关联阵列的哈希地图功能 - 也就是说,如果您不是用于特定目的的数组密钥,并且只需要枚举的数组-SplfixedArray(以前是SplfastarRay) ,目前无证)可能是合适的替代品.唯一的警告是,数组的大小是固定的,这意味着当您实例化类时,必须指定大小,并且如果您尝试存储超过该数量的元素,则会发生错误.这就是平均表现优于标准PHP阵列的原因. 在构成PHP解释器的C代码中,数组被实现为称为Hash表或哈希地图的数据结构.当数组中包含
我想做一个简单的版本控制系统,但我没有关于如何构建数据和代码的想法. 这是一个简短的例子: 用户登录 上传文件时,用户有两个选项: 提交新文件 提交文件的新版本 用户应该能够看到树. (不同的版本) 这棵树最多只能达到2个级别: | |--File_A_0 \--File_A_1 \--File_A_2 \--File_A_3 \--File_A_4 也有两种类型的文件,最终的文件(这是最新的批准版本)和一个草稿版本(最新上传的文件) 该文件将物理存储在服务器上. 每个文件均由用户(或更多)和一个组拥有. 编辑:组代表一组文档,文档只能一次由一个组拥有.用户不依赖组. 开始编辑: 这是我所做的,但这并不是真的有效! id_article | relative_group_id | id_group | title | submited | date | abstract | reference | draft_versio
除array以外,php中是否有任何数据结构.是否可以创建诸如ArrayList之类的数据结构?如果是这样,请提供一些参考或某种实施. 解决方案 您需要了解的有关数组的所有信息都可以在 文档 . 函数参考参考 . 一些笔记: 数组最初是PHP中唯一的数据架构.这就是为什么它们如此灵活的原因.它们本来可以用作堆栈,队列,阵列,列表,哈希表等.稍后,PHP引入了 SPL数据架构. 与Java不同,PHP不是纯语言.阵列本身没有内置的方法可以应用.这必须通过"正常"功能完成. 数组没有固定尺寸.它们会自动扩展和收缩. 在以下内容中,我尝试列出最常见的 ArrayList方法: add(element)基本上只是通过$array[] = $element附加.新值获取下一个免费数字索引(这是首选方式).您还可以使用 array_push($array, $element) . addAll(ArrayList): array_merge($array1
我很好奇,我一直在开发功能强大的网站/网络应用程序,而且我从未学会过XML,甚至我从未真正感到需要的ODDER.这不像卷发或准备好的陈述,在知道他们做了什么以及他们的工作方式之前,我感到"必须更简单地做到这一点!"或"必须为此设计一些东西!". 目前,我与MySQL和Json一起工作,我没有这种感觉"我需要学习"(XML),这一定是错误的! 我真的很想听听XML的一些引人注目的论点,并了解比JSON或MySQL(或Web Dev的其他方面)可以做的事情,以及我应该使用它! 解决方案 JSON非常轻巧,使其更适合将数据传递到前端. XML具有描述性标签,这些标签(我个人发现)使以原始格式阅读更易于阅读. 如果我想从程序中加载任何类型的设置文件,我将以XML文件格式使用它. 无论如何,这就是我的想法,但是我敢肯定,选择另一个是更多的深入理由.我的经验不足以列出:) 但是,我确实找到了一些提出一些好处的网站. debate (评论中的一些好处)
我很好奇,我一直在开发功能强大的网站/网络应用程序,而且我从未学会过XML,甚至我从未真正感到需要的ODDER.这不像卷发或准备好的陈述,在知道他们做了什么以及他们的工作方式之前,我感到"必须更简单地做到这一点!"或"必须为此设计一些东西!". 目前,我与MySQL和Json一起工作,我没有这种感觉"我需要学习"(XML),这一定是错误的! 我真的很想听听XML的一些引人注目的论点,并了解比JSON或MySQL(或Web Dev的其他方面)可以做的事情,以及我应该使用它! 解决方案 JSON非常轻巧,使其更适合将数据传递到前端. XML具有描述性标签,这些标签(我个人发现)使以原始格式阅读更易于阅读. 如果我想从程序中加载任何类型的设置文件,我将以XML文件格式使用它. 无论如何,这就是我的想法,但是我敢肯定,选择另一个是更多的深入理由.我的经验不足以列出:) 但是,我确实找到了一些提出一些好处的网站. debate (评论中的一些好处)
我正在寻找最佳的方法来检索记录的下一个记录和以前的记录,而无需运行完整查询.我有一个完全实施的解决方案,想知道是否有更好的方法可以做到这一点. 假设我们正在为虚构的绿色菜园建立一个网站.除了他的HTML页面外,他每周都想在其网站上发布特别优惠的清单.他希望这些要约居住在实际的数据库表中,并且用户必须能够以三种方式对报价进行分类. 每个项目还必须具有一个详细页面,其中包含有关报价的更多文本信息以及"上一个"和"下一个"按钮. "上一个"和"下一个"按钮需要指向相邻条目,具体取决于用户为列表选择的排序. (来源:显然,"西红柿,I级"的"下一个"按钮必须是"苹果,第1级",在第一个示例中,"梨,I类",而在第三级则没有. 详细视图中的任务是确定下一个和上一个项目,而无需每次运行查询,列表的排序顺序是唯一的可用信息(假设我们通过a get参数?sort=offeroftheweek_price,忽略安全含义). 显然,仅将下一个元素和上一个元素的ID作为参数就是第
我正在看 php手册,我没有看到部分关于大多数语言具有的数据结构,例如列表和集合.我只是失明还是php没有内置的东西? 解决方案 PHP中唯一的天然数据结构是数组.幸运的是,阵列非常灵活,也可以用作哈希表. http://www.php.net/array 但是,有SPL是C ++ STL的克隆. http://www.php.net/manual/manual/en/en/book. spl.php 其他解决方案 PHP通过标准PHP库(SPL)基本扩展提供数据结构,该扩展名为PHP 5.0.0. 提供的数据结构可提供php 5> = 5.3.0,其中包括: 双重链接列表 双重链接列表(DLL)是在两个方向上链接的节点列表.当底层结构是DLL时,迭代器的操作,对两端的访问,添加或删除节点的成本为O(1).因此,它为堆栈和队列提供了体面的实现. spldoublylinkledlist类 splstack class splque
嗨,我有一个数据库表,我想将其设置为树结构并获取该树的叶子节点. 在此表中我有PreferenceID和PreferenceParentID. 在这种情况下,我想修建一棵树. Level 1应该是fashion和music,因为它们具有PreferenceParentID = 0 in 2 nd级别men's clothing应该在fashion下,因为它的父偏好是时尚. Artists sholud在music下. 在3中couture和denims应在men's clothing和african和afrobeat下. 我想获得所有叶子节点值.在这种情况下,我想获得 couture和denims和非洲and afrobeat`. 树可以长到n个水平. 请帮助我.欢迎任何建议............................................................................ d 解
您可以帮助我澄清PHP接口.我知道要重点是为了使多个类可以实现一些相同的功能. abstract class Plane { public function openDoors(); } interface Fliers { public function fly(); } 现在让它们使用 class Boeing747 extends Plane implements Fliers { public function fly() { // some stuff } public function openDoors() { // do something } } 和 class Tweety implements Fliers{ public function fly() { // some stuff } } 在这种情况下,波音747和Tweety都可以实现接口传单以访
直到可以使用这种语法访问WP_Admin_Bar Object中的3.3beta1项目,例如,更改现有菜单项之一的CSS类: $wp_admin_bar->menu->{'wp-logo'}['meta']['class'] = 'new-class'; 运行print_r($wp_admin_bar)输出看起来像这样: WP_Admin_Bar Object ( [menu] => stdClass Object ( [my-account] => Array ( 但是,围绕版本3.3beta2更改菜单项的CSS类的上述语法不再有效,并且来自print_r($wp_admin_bar)的输出揭示了该对象的不同结构: WP_Admin_Bar Object ( [nodes:WP_Admin_Bar:private] => Array (
在PHP中,有一个正式称为" 变量变量"的功能一个人可以分配变量.变量变量将一个变量的值作为新变量的名称!例如: $name='Joe'; $$name='Smith'; // could also be written as ${$name}='Smith' 第一个变量$名称包含值" joe",而第二个变量名称为$ joe,带有" smith".考虑到PHP变量对病例敏感! 我从未使用过此功能,也没有看到目的.有人可以向我解释一下这种功能可以用作一个好习惯吗? 解决方案 有时我们需要非常灵活的软件,并且可以参数化.当然,您必须准备整个过程,但是其中一部分来自用户输入,我们没有时间更改软件,因为用户需要新的输入. 使用可变变量和变量函数,您可以解决没有它们的问题,这些问题很难解决. 快速示例: 没有变量的没有变量: $comment = new stdClass(); // Create an object $comment->name
我正在寻找一种代表PHP中家谱的方法.这意味着孩子将需要从两个(或更多)父母继承. 这是要求: 1、2或更多的父母 奖励点如果我可以像姓氏或关系状态一样附加元数据 这是我的非工作尝试(可悲的是没有键的数组): $tree = array( 'uncle' => false, // no children array('mom', 'dad') => array( 'me' => false, array('brother', 'sister-in-law') => array( 'niece' => false ) ) ); 问题是,我如何表示有这些要求的家谱? 解决方案 您将无法像这样的单个array()完成所有操作.您可以像这样设置树木,但是与多个父母建立更复杂的图表,其他关系需要多行代码. 如果您对此投入一些OO,这将很有帮助.让我们创建一个P
最近,我开始使用MySQL为PHP编写的Legacy电子商务应用程序进行Elasticsearch(ES)实施.我对所有这些东西都是陌生的,并且阅读文档很好,但是我真的需要一个有经验的人来建议我. 从ES文档中,我能够设置一个新的集群,我还发现河流已弃用并应更换,因此我用Logstash和JDBC MySQL Connector替换它们. . 此时我有: Elasticsearch logstash JDBC MySQL驱动程序 mysql Server 应用程序的数据库结构并不是真正最佳的,很难替换,但是我想以最好的方式将其复制到ES索引中. db结构: 产品 +-------------------------------+-------+--------+ | Id | Title | Price | +-------------------------------+-----