创建迁移 首先,让我们创建一个MySql数据库“Laravel_db”。接下来打开app/config目录下的database.php文件。请确保default键值是mysql:
1 2 3 |
1 return array( 2 ... 3 'default' => 'mysql', |
然后输入你的数据库配置信息:
1 2 3 4 5 6 7 8 9 10 11 |
2 'connections' => array( 3 'mysql' => array( 4 'driver' => 'mysql', 5 'host' => '127.0.0.1', 6 'database' => 'laravel_db', //数据库名 7 'username' => 'root, //你的数据库用户 8 'password' => 'Your_Database_Password', //数据库登录密码 9 'charset' => 'utf8', 10 'collation' => 'utf8_unicode_ci', 11 'prefix' => '', 12 ), |
我们要使用Laravel命令行工具artisan来创建我们新的迁移。要运行astisan需要打开一个终端,切换路径到Laravel引用程序文件夹的更目录。 第一个我们需要做的就是安装migrations表,这样Laravel就可以追踪哪些迁移已经运行了。下面的命令将会在数据库中创建一个特殊的表:
1 |
1 php artisan migrate:install |
如下: 如果创建成功,artisan会返回“Migration table created successfully.”。 查看数据库,你会发现artisan确实创建了一个新表“migrations”。 你不需要过于关注这个表。这只是一个帮助Laravel监视迁移的表。当你添加新的迁移,artisan migrate会检查migrations表并执行那些没有运行的迁移。 现在,让我们创建一个实际的迁移文件。我想创建一个名为“author”的新表。让我们运行artisan migrate:make命令:
1 |
1 php artisan migrate:make create_authors_table |
运行截图如下: 你会在app/database/migrations目录下看到文件2014_03_11_162133_create_authors_table.php。 正如你看到的,一个新的迁移文件名称中包含时间戳和迁移的描述性名称。 [注]注意细节的读者可能会注意到我们用“authors”问不是“author”命名作者表。这是Laravel设计理念的一方面,使用自然模型帮助我们存储数据模型。Laravel的表应该始终命名为你的数据模型的复数形式。对于Author模型,表就被命名为“authors”。如果你有一个模型Car,你需要命名表为“Cars”。另外,SELECT name FROM authors WHERE id=100比SELECT name FROM author WHERE id=100更有意义。 迁移的解剖 迁移是Illuminate\Database\Migrations\MigrationLaravel 类的子类。您创建的类必须至少包含类的两个方法up()和down()。下面是生成由artisan的骨架迁移类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
1 <?php 2 use Illuminate\Database\Schema\Blueprint; 3 use Illuminate\Database\Migrations\Migration; 4 5 class CreateAuthorsTable extends Migration { 6 7 /** 8 * Run the migrations. 9 * 10 * @return void 11 */ 12 public function up() 13 { 14 // 15 } 16 17 /** 18 * Reverse the migrations. 19 * 20 * @return void 21 */ 22 public function down() 23 { 24 // 25 } 26 } |
使用Laravel,我们可以在任何时间迁移到数据模型的特定版本。Up()方法中的代码执行向前迁移,down()执行反向迁移(创建数据库的新版本或者回滚到前一个版本)。 很容易想到up()执行迁移文件操作,down()是完全相反。就像word文档中的撤销命令——撤销所做的修改。例如,我们想创建一个“authors”表,在up()中创建,在down()中撤销。让我们看看应该怎么做。 Artisan migrate:make命令有一些可以加快你工作流的其他选项。让我们运行下面命令:
1 |
1 php artisan migrate:make create_authors_table --table authors --create |
在上面的例子中,我们使用—table选项指定表名。另外,我添加了—create选项去告知artisan这个表需要被创建。如果我们打开迁移文件,你会发现artisan为我们生成了额外的样板文件代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
1 <?php 2 use Illuminate\Database\Schema\Blueprint; 3 use Illuminate\Database\Migrations\Migration; 4 5 class CreateAuthorsTable extends Migration { 6 7 /** 8 * Run the migrations. 9 * 10 * @return void 11 */ 12 public function up() 13 { 14 Schema::table('authors', function(Blueprint $table) 15 { 16 // 17 }); 18 } 19 20 /** 21 * Reverse the migrations. 22 * 23 * @return void 24 */ 25 public function down() 26 { 27 Schema::table('authors', function(Blueprint $table) 28 { 29 // 30 }); 31 } 32 } |
非常棒!现在,让我们做更加具体的工作。我们要使用的 Laravel Schema类来创建我们的"Authors"表。下面是创建作者表,并将必要的列添加到表的迁移代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
1 public function up() 2 { 3 Schema::create('authors', function(Blueprint $table) 4 { 5 // auto increment id (primary key) 6 $table->increments('id'); 7 8 $table->string('name'); 9 $table->integer('age')->nullable(); 10 $table->boolean('active')->default(1); 11 $table->integer('role_id')->unsigned(); 12 $table->text('bio'); 13 14 // created_at, updated_at DATETIME 15 $table->timestamps(); 16 }); 17 } |
我们调用Schema::create()方法创建一个新表“authors”。Schema::create()方法有两个参数:表名和一个闭包,闭包中包含了列定义。 闭包中,我们可以使用$table参数创建列。列定义方法的基本结构是:
1 |
1 $table->column_type(column_name) |
列类型 在前面的示例中,我们指定的名称列的类型为"string"。但这是什么意思?数据库中通常没有”string”类型的列。 请记住,Laravel 试图使您的应用程序独立于底层的数据库;例如,如果你想,你可以使用 MySql 开发并部署到 Postgresql。如果您在迁移中使用 MySql 的列类型,应用到 Postgres 数据库可能无法工作。所以,Laravel 迁移通过使用通用的数据类型使你与底层的数据库类型系统隔离。如果我们要迁移 MySql 数据库, string()方法将创建VARCHAR(255)类型的列。在 Postgres,同一迁移可能会添加CHAR VARYING(255)类型的列 (虽然VARCHAR类型支持所有主要的数据库平台)。 Laravel 直接支持以下数据类型: Laravel 方法 列的类型 increments($column) 向表中添加自动递增的主键 string($column) 添加一个VARCHAR(255)列 string($column, $length) 添加具有长度的VARCHAR integer($column) 向表中添加一个INTEGER列, float($column) 向表中添加一个FLOAT的列 decimal($column, $precision, $scale) […]
View Details该章节内容翻译自《Database Migration using Laravel》,一切版权为原作者。 原作者:Stable Host, LLC 翻译作者:Bowen Huang 正文: Laravel鼓励敏捷、迭代的开发方式,我们没指望在第一次就获得所有正确的。相反,我们编写代码、测试和与我们的最终用户进行交互,并完善我们的理解。 对于工作,我们需要一个配套的实践集。我们使用像subversion、GIT或Mercurial这些版本控制工具来存储应用程序的源代码文件,使我们能够撤消错误和追踪开发过程中的改变。 但应用程序更改时,存在我们不能单独使用版本控制进行有效管理的区域。在我们的开发进度中,Laravel应用程序的数据库架构不断演变:我们在这里添加了一个表,在那里重命名列,删除索引等等。数据库的改变与应用程序代码步调一致。 你需要一个复杂的方法来跟踪您的数据库架构更改,通常有几种方法: 当您在开发团队内工作时,每人都需要知道关于任何架构的更改。 当你在生产服务器上部署时,您需要有稳健的方式来升级您的数据库架构。 如果您在多台机器上工作,你需要保持所有数据库架构的同步。 如果没有严格的约定和纪律让应用程序开发者遵循,保持数据库架构与应用程序代码同步历来是一个非常麻烦的工作。开发者(或数据库管理员) 进行所需的架构更改。但是,如果应用程序代码回滚到以前的版本,但是很难撤消数据库架构更改,照成数据库版本信息与应用程序代码版本信息不一致。 迁移就是帮助你进化你的应用程序数据架构的Laravel方式,它不需要你在每次改变的时候删除或者重建数据库。没有删除和重建就意味着你不会在每次改变的时候丢失数据。当你执行迁移时唯一的改变就是将数据库架构从一个版本移到另一个版本,不管是向前还是向后移。 Laravel迁移给你提供了一种在迭代方式中修改数据库架构的手段,它不要你用SQL操作,而是允许你使用PHP代码。Laravel架构生成器允许我们快速创建数据库表和插入列或索引。它使用清洁和富有表现力的语法来操作数据库。你也许为认为Laravel迁移就是数据库的版本控制。 通过定义一个更高级别的接口来创建和维护数据库架构,你可以用与数据库无关的方式定义它。通过使用 PHP 来创建表,定义列和索引,写一次架构并将其应用到任何所支持的数据库后端。额外的好处是 ,Laravel 跟踪已经应用了哪些迁移和哪些仍需要应用。 迁移基础知识 一个Laravel迁移仅仅是你应用程序app/database/migrations目录下的PHP源文件。每个文件都包含了对底层数据库的一组改变。对数据库的改变是在PHP代码中而不是数据库特定的SQL。你的PHP迁移代码最终被转换成符合你当前数据库的DDL,这使得切换数据库平台非常的容易。由于迁移代码保存在自己的目录中,就务必要像其他的项目代码一样包含到版本控制里面。Laravel迁移是使用Artisan工具用命令行显示运行的。 迁移文件命名约定 在旧版本Laravel的,迁移的文件有比较简单的名字,如001_create_employees_table.php 。 Laravel 3(Laravel 4.1和其相同)带来了新的命名约定,其中名称的第一部分从一个序列号变更为更长的时间,像2014_03_11_032903_create_employees_table.php。该文件的名称的形式YYYY_MM_DD_HHMMSS_some_meaningful_name.php的,也就是说一个UTC时间戳识别后跟一个迁移名。 新的更宽的名字有助于避免名称冲突,如果你是工作在一个团队里的一个开发人员,你可以检查自己的迁移。 此外, Laravel迁移文件的时间戳,以便他们可以顺序执行。时间戳数字是迁移的关键,因为它们定义了哪一个迁移应用在独立迁移版本号的顺序。 想SQL脚本,迁移从顶部开始执行,这更加需要这些文件才能被执行。顺序执行移除了类似这样的可能性——在表不存在的时候尝试插入列。 尽管你可以手动创建迁移文件,但是使用Artisan工具生成迁移脚本更加的容易(并且不易出错)。你可以根据需要在以后编辑这些文件。 运行迁移Forward 和 Backward 使用Artisan工具迁移到数据库。Laravel提供了一套artisan任务,可以归结为运行特定的几套迁移。 [注]你可以运行artisan list同查看artisan支持的任务列表,大多数数据迁移相关的任务都带有前缀migrate:。 只有几个你需要知道的常见任务: migrate:install 你第一次使用的与迁移有关的artisan任务可能就是migrate:install。在内部,Laravel使用特殊的表来跟踪哪些迁移已经运行。若要创建此表,只需要用artisan命令行工具: $php artisan migrate:install migrate 你将会运行migrate任务频繁的更新你的数据库,以支持你添加到应用程序中的最新的表和列。最基本的形式,它只会对那些所有没有被运行过的迁移运行up()方法。如果没有这样的迁移,会退出。它将基于迁移的日期来运行这些迁移。 migrate:rollback 在写迁移时偶尔也会犯错误。如果你已经运行了迁移,那么你不能只是编辑迁移和再次运行迁移:Laravel假定它已经运行了迁移,那么当你再次运行artisan migrate,不会做任何事情。你必须使用artisan migrate:rollback回滚迁移,然后编辑迁移,再运行artisan migrate去运行正确的版本。 一般情况下,编辑现有的迁移不是好主意:你和你的同事将会需要额外的工作,并且这是一件让人头痛的事——如果现存版本的迁移已经运行在生产机器上。相反,你需要写一个新的迁移去执行所需的改变。 [注]artisan migrate:rollback 会删除上次的迁移应用。Laravel回去整个迁移“操作”。因此,如果上次的迁移命令运行了15个迁移,这15个迁移都会被回滚。请注意,当你删除列或者表,会丢失数据。 migrate:reset 回滚所有的迁移(会删掉所有表和数据) migrate:refresh artisan migrate:refresh任务将删除数据库、 重新创建它并将加载当前架构。这是一个方便快捷方式去运行重置并随后重新运行所有迁移。 migrate:make artisan migrate:make命令告诉 Laravel 来生成一个迁移文件骨架 (这是实际上是一个 PHP 文件) ,存放到app/database/migrations文件夹中。然后,您可以编辑此文件来充实您的表/索引定义。然后,artisan migrate命令运行时,artisan会查询此文件来生成 SQL DDL 的实际代码。 接下来会详细描述数据库迁移 未完待续…… from:http://www.cnblogs.com/huangbx/p/Laravel_3.html
View Details在一切环境就绪了,当然就要开始了解框架了。 站在巨人的肩膀上,学东西会事半功倍。我在网上找到一篇好文章,正好可以让我轻松了解Laravel应用程序的体系结构。因此借来直接用了。 该章节内容翻译自《Architecture of Laravel Applications》,一切版权为原作者,由于原作者写这篇文章时Laravel版本还没有到4.1,一些地方有稍微差别,我会稍作修改。 原作者:Stable Host, LLC(不知道找对了没有) 翻译作者:Bowen Huang 正文: Laravel被称为“全栈”式框架,因为它处理从网络服务到数据库管理,直到HTML生成的一切事情,一个垂直集成的web开发环境能给开发者提供更好的体验。 一个典型的程序员通过命令行工具与Laravel交互,生成和管理Laravel项目环境。Laravel带有一个名为Artisan的优秀的命令行工具,可以用它来生成框架代码和数据库架构,Artisan能够处理从数据库架构迁移到资源和配置管理的一切事情。 约定优于配置 Laravel 的有趣的特征之一,在如何构建 web 应用程序上它规定了一些相当严重的限制。出人意料的是,这些限制使创建应用更加的容易——轻松了很多。让我们来看看为什么。 Laravel区别于其他垂直集成开发环境在于它强烈的偏好约定优于配置。而一些 Java,Python 或 PHP 框架往往需要大量的 XML 配置,Laravel在开始的时候几乎不需要配置(也许只有几行在PHP中)。这种对配置文件的规避行为使其非常独特,在所有 Laravel 应用程序中可识别的代码结构是相同的。 一个项目结构来统治他们所有 ! 这并不奇怪,所有Laravel项目基本上具有相同的目录结构 ——在其中的每个文件都有其指定的地方。通过这种约定的目录结果,可以确保开发者按照“Laravel way”工作。 图 1.1 显示了 Laravel 项目目录结构是什么样子: 图1.1 Laravel 项目目录结构 就如你看到这样,laravel下面只包含了4个文件夹,这4个文件夹下面有一些子文件夹,这种丰富的子文件夹在第一次看到是不是有压力?我会逐个介绍。我们大部分的开发工作都会在app/文件夹下面进行。 下面是各个文件夹和文件的基本介绍: 顶级文件夹 作用 app 包含了站点的controllers(控制器),models(模型),views(视图)和assets(资源)。这些是网站运行的主要代码,你会将你大部分的时间花在这些上面。 bootstrap 用来存放系统启动时需要的文件,这些文件会被如index.php这样的文件调用。 public 这个文件夹是唯一外界可以看到的,是必须指向你web服务器的目录。它含有laravel框架核心的引导文件index.php,这个目录也可用来存放任何可以公开的静态资源,如css,Javascript,images等。 vendor 用来存放所有的第三方代码,在一个典型的Laravel应用程序,这包括Laravel源代码及其相关,并含有额外的预包装功能的插件。 正如上面提到的,/app是所有的乐趣产生的地方,让我们更深入的看看这个目录的结构。 图 1.2 显示/app文件夹的详细信息: 图1.2 app 文件夹详细信息 下面是详细介绍: 文件的文件夹 作用 /app/config/ 配置应用程序的运行时规则、 数据库、 session等等。包含大量的用来更改框架的各个方面的配置文件。大部分的配置文件中返回的选项关联PHP数组。 /app/config/app.php 各种应用程序级设置,即时区、 区域设置(语言环境)、 调试模式和独特的加密密钥。 /app/config/auth.php 控制在应用程序中如何进行身份验证,即身份验证驱动程序。 /app/config/cache.php 如果应用程序利用缓存来加快响应时间,要在此配置该功能。 /app/config/compile.php 在此处可以指定一些额外类,去包含由‘artisan optimize’命令声称的编译文件。这些应该是被包括在基本上每个请求到应用程序中的类。 /app/config/database.php 包含数据库的相关配置信息,即默认数据库引擎和连接信息。 /app/config/mail.php 为电子邮件发件引擎的配置文件,即 SMTP 服务器,From:标头 /app/config/session.php 控制Laravel怎样管理用户sessions,即session […]
View Details摘要 Laravel的目标是给开发者创造一个愉快的开发过程,并且不牺牲应用的功能性。快乐的开发者才能创造最棒的代码!为了这个目的,开发者博取众框架之长处集中到Laravel中,这些框架甚至是基于Ruby on Rails、ASP.NET MVC、和Sinatra等开发语言或工具的。 对Laravel初步认知 刚从事PHP开发没多久,对PHP的一些框架了解甚少,在CSDN上看到一篇文章《PHP开发框架流行度排名:Laravel居首》,才知道还有Laravel这么个框架,正好公司想从事Laravel的开发,就学习一下。然后搜索了大量的资料,了解到了它是什么。 至于它的详细介绍我就不说了,google一下,就有了。 Laravel环境搭建 在有了初步认知后,当然就要开始在自己的电脑上搭建Laravel的开发环境了。 系统环境需求 PHP 5.3.7或者更高版本,如果没有系统没有安装PHP环境的,请到下面地址下载:http://cn2.php.net/downloads.php 电脑上具有web服务器,IIS,apache或者其它web服务器 MCrypt PHP扩展 安装Composer Laravel框架使用Composer(PHP包管理工具,参考 Composer 中文文档)来管理代码依赖性。Windows操作系统中,你可以使用Composer的Windows安装工具。下载后直接安装就可以了,安装之后,可以在控制台输入composer查看是否安装成功。 安装Laravel 在Github下载最新版本(目前4.1):https://github.com/laravel/laravel/archive/master.zip 将文件解压到你想要的任何位置,例如,我解压到我的H盘Laravel_site目录下 控制台进入该目录(Laravel_site),执行命令composer install (温馨提示:laravel的版本要和php的版本对应哦),然后程序会下载必要安装文件,要保证网络畅通 安装完成后如下图: 然后观察文件目录下,多了一个vendor文件夹,composer.lock文件也被修改了。 当然还有一种安装方式,就是直接下载完整安装包,解压即可,下载地址:http://ci.laravel-cn.com/laravel.zip 服务器配置 在上面的操作完成后,就是配置该站点在web服务器上,我相信这些操作,只要有过网站开发经验的人都有,我就不详细介绍了。这里要注意一点的就是,配置网站的时候,根目录是public,为不是最Laravel_site,配置好了,运行如下: 安装顺利完成! from:http://www.cnblogs.com/huangbx/p/Laravel_1.html
View Details准备工作 环境说明:win7(64位),已安装iis7.5,已安装JDK。 首先下载Tomcat8:http://mirrors.cnnic.cn/apache/tomcat/tomcat-8/v8.0.27/bin/apache-tomcat-8.0.27-windows-x64.zip 下载连接器:http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/windows/tomcat-connectors-1.2.40-windows-x86_64-iis.zip Tomcat 解压tomcat到D:\Tomcat8027。 以管理员身份运行:D:\Tomcat8027\bin\service.bat,执行成功后启动服务:Apache Tomcat 8.0 Tomcat8。 在浏览器中输入:http://localhost:8080,如果显示tomcat页面,说明安装成功。 连接器 从连接器压缩包解压isapi_redirect.dll到D:\Tomcat8027\conf。 把以下代码保存为tomcat_iis.reg,并双击导入注册表。 Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Apache Software Foundation\Jakarta Isapi Redirector\1.0] "extension_uri"="/jakarta/isapi_redirect.dll" "log_file"="D://Tomcat8027//logs" "log_level"="debug" "tomcat_start"="D://Tomcat8027//bin//startup.bat" "tomcat_stop"="D://Tomcat8027//bin//shutdown.bat" "worker_file"="D://Tomcat8027//conf//workers.properties" "worker_mount_file"="D://Tomcat8027//conf//uriworkermap.properties" 在D:\Tomcat8027\conf下创建三个文件: workers.properties workers.tomcat_home=D:\Tomcat8027\ workers.java_home=D:\Program Files\Java\jdk1.8.0_51 ps=\ worker.list=worker1 worker.worker1.port=8009 worker.worker1.host=localhost worker.worker1.type=ajp13 worker.worker1.lbfactor=1 uriworkermap.properties /*.jsp=worker1 isapi_redirect.properties extension_uri=/jakarta/isapi_redirect.dll log_file=D:\Tomcat8027\logs\isapi_redirect.log log_level=info worker_file=D:\Tomcat8027\conf\workers.properties worker_mount_file=D:\Tomcat8027\conf\uriworkermap.properties IIS站点的设置 首先点击IIS管理器根节点,双击“ISAPI和CGI限制”,右键“添加”,ISAPI或CGI路径:D:\Tomcat8027\conf\isapi_redirect.dll,描述:jakarta,勾选“允许执行扩展路径”。 然后创建一个站点:TestJsp,并绑定testjsp主机名,并在hosts文件里绑定,我的物理路径是:F:\TEST\JSP。 在站点下新建虚拟目录jakarta,别名要和注册表里的一致,所以要用:jakarta,物理路径:D:\Tomcat8027\conf。 点击站点下的jakarta,双击“处理程序映射”,点击第三栏的菜单“编辑功能权限”,勾选“执行”。 点击TestJsp站点,双击“ISAPI筛选器”,添加一个筛选器,筛选器名称:jakarta,可执行文件:D:\Tomcat8027\conf\isapi_redirect.dll。 打开D:\Tomcat8027\conf\server.xml,在Engine标签里添加一个Host元素: <Host name="testjsp" appBase="." unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="/" reloadable="true" docBase="F:\TEST\JSP" workDir="F:\TEST\JSP"></Context> </Host> ps:name、iis绑定的主机名、hosts的指向名称一定要一致。 在F:\TEST\JSP下添加测试文件test.jsp: <%@ page language="java"%> <%@ page contentType="text/html; charset=utf-8"%> <%@ page import="java.util.*"%> <%@ page import="java.text.*"%><% […]
View Details1、前言 在游戏开发中很多功能按权重随机给东西,比如:掉落、奖励、抽奖等等….. 2、功能 *)支持多个权重进行随机 *)能屏蔽指定权重,防止再次随机到 3、实现 [java] view plaincopy public int weightRandom(BitSet exclude, int… weights) { if (weights == null) { //安全性验证 } int length = weights.length; if (length == 0) { return –1; } if (len == 1) { int w = weights[0]; if (w < 0) { //安全性验证 } else if (w == 0) { return –1; } else { return 0; } } int total = 0; for (int i = 0; i < len; i++) { if (exclude != null && exclude.get(i)) { continue; } int w = weights[i]; total += w; } if (total <= 0) { return –1; } int randomNum = random(1, total), hitIndex = –1, partNum = 0; for (int i = 0; i < len; i++) { if (exclude != null && exclude.get(i)) { continue; } int w = weights[i]; partNum += w; if (partNum >= randomNum) { hitIndex = i; break; } } return hitIndex; } from:http://blog.csdn.net/zeus_9i/article/details/11900015
View Details一、问题定义: 问下有一个数组,这些数组中的值都有自己的权重,怎样设计才能高效的优先取出权重高的数?? 例如: 复制代码代码如下: 权重: 8 2 11 79 权重返回的值: 0 1 2 3 二、分析问题: 思路一:创建一个数组数组大小为权重和的大小,如值0的权重是8,则放入8个0值,值1的权重是2,则放入2个1值,依次类推。 然后用用一个权重和大小的随机数,产生随机数,即可。缺点要占用过多的内存。 思路二: 权重和数组 w[i]存储的是[0,i]元素的所有元素的权重和 时间复杂度O(n) 空间复杂度O(n) 随机[0,W[399]] 看随机数 落在哪个Wi 内就选哪个 时间复杂度 O(longn) 所以总的时间复杂度时间复杂度O(n) 空间复杂度O(n) 伪代码: 轮盘赌 并不是一种特别好的选择算子,但它容易实现。 首先要明白一点,由于交叉、变异等算子,并不能控制进化方向,所以进化的重任落在选择算子上。 如果明白了这一点,就好办了。 轮盘赌,就是积累概率来实现的,通常适应度大的被选择的几率较高。 假如:fit为适应度数组,共m个 复制代码代码如下: for i=1 to m '先求和 sum=sum+fit(i) next i For i = 1 To n ‘n-是要生成多少个个体 temp = temp + fit(i) If rnd <= temp / sum Then 输出 i 就是结果 Exit Function End If Next i 三、解决问题: 复制代码代码如下: package datastruct; import java.util.HashMap; import java.util.Map; /** 权重随机数: 如 权重:8 2 11 […]
View Detailscurl是专门用来进行网络交互的库,提供了一堆自定义选项,用来应对不同的环境,稳定性自然要大于file_get_contents。 选择curl的理由 关于curl与file_get_contents,摘抄一段通俗易懂的对比: file_get_contents其实是一堆内置的文件操作函数的合并版本,比如file_exists,fopen,fread,fclose,专门提供给懒人用的,而且它主要是用来对付本地文件的,但又是因为懒人的原因,同时加入了对网络文件的支持; curl是专门用来进行网络交互的库,提供了一堆自定义选项,用来应对不同的环境,稳定性自然要大于file_get_contents。 使用方法 1、开启curl支持 由于php环境安装后默认是没有打开curl支持的,需修改php.ini文件,找到;extension=php_curl.dll,把前面的冒号去掉,重启服务即可; 2、使用curl进行数据抓取 复制代码代码如下: // 初始化一个 cURL 对象 $curl = curl_init(); // 设置你需要抓取的URL curl_setopt($curl, CURLOPT_URL, 'http://www.cmx8.cn'); // 设置header curl_setopt($curl, CURLOPT_HEADER, 1); // 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 运行cURL,请求网页 $data = curl_exec($curl); // 关闭URL请求 curl_close($curl); 3、通过正则匹配找到关键数据 复制代码代码如下: //$data是curl_exec返回的的值,即采集的目标内容 preg_match_all("/<li class=\"item\">(.*?)<\/li>/",$data, $out, PREG_SET_ORDER); foreach($out as $key => $value){ //此处$value是数组,同时记录找到带匹配字符的整句和单独匹配的字符 echo '匹配到的整句:'.$value[0].' '; echo '单独匹配到的:'.$value[1].' '; } 技巧 1、超时的相关设置 通过curl_setopt($ch, opt) 可以设置一些超时的设置,主要包括: CURLOPT_TIMEOUT 设置cURL允许执行的最长秒数。 CURLOPT_TIMEOUT_MS 设置cURL允许执行的最长毫秒数。 (在cURL 7.16.2中被加入。从PHP 5.2.3起可使用。 ) CURLOPT_CONNECTTIMEOUT 在发起连接前等待的时间,如果设置为0,则无限等待。 CURLOPT_CONNECTTIMEOUT_MS 尝试连接等待的时间,以毫秒为单位。如果设置为0,则无限等待。 在cURL 7.16.2中被加入。从PHP 5.2.3开始可用。 CURLOPT_DNS_CACHE_TIMEOUT 设置在内存中保存DNS信息的时间,默认为120秒。 复制代码代码如下: curl_setopt($ch, CURLOPT_TIMEOUT, 60); //只需要设置一个秒的数量就可以 […]
View Details运行环境: PHPSTORM版本 : 8.0.1 PHP版本 : 5.6.2 xdebug版本:php_xdebug-2.2.5-5.6-vc11-x86_64.dll ps : php版本和xdebug版本一定要相对应,且要看清64位和32位哦~ 1. PHP安装xdebug扩展 php.ini的配置,下面的配置仅供参考,路径要换成自己的! [xdebug] zend_extension=”D:\wamp\php-5.6.2-x64\ext\php_xdebug-2.2.5-5.6-vc11-x86_64.dll” xdebug.remote_enable = On xdebug.remote_handler = dbgp xdebug.remote_host= localhost xdebug.remote_port = 9000 xdebug.idekey = PHPSTORM ps : remote_handler 、 remote_host、 remote_port 这些都有默认值,但还是建议设置下,至少知道要设置这些参数~ 查看phpinfo~ 2.PHPSTORM设置 楼主以前一直用zendstudio,刚开始用phpstorm非常蛋疼,用了一段时间后发现还挺好用的~ 1.首先检查phpstorm的xdebug配置 这里的debug port要和php.ini里面的 xdebug.remote_port相一致!默认是9000,如果9000端口被占用的话,可以改成其他端口。 2. 设置debug. 添加本地的 web server~ www.51open.pcom 是我本地的 web server~ ~ 3.开始调试 打好第一个断点,shift + F9就可以了 打好 第一个断点 ,选中配置的debug, 按旁边的臭虫 按钮 总结: 根据断点配置,或在打开 Debug URL 的过程中,或在 POST 之后,如果 PhpStorm 监听到了 Debug 连接,就会立即切换到编辑器界面,并跳转到设置的断点处,浏览器端会等待 PhpStorm 的操作。 你可以随时中断 PhpStorm 的调试,或方便的进行 Step Into / Step Over / Run to cursor(这个刁爆了): […]
View Details问题: 解决办法: 1.电脑左下角开始--搜索”php.exe“,记录下路径,如我的是C:\xampp\php\ 2.点击phpstorm里的configured PHP Interpreter(见下图) 3.点击下图里的红框 4.在下图红框输入步骤1里的php的文件夹路径确认即可。 PS:本人是新手在自学PHP,有什么说得不对的,麻烦各位指出。谢谢。 from:http://www.bubuko.com/infodetail-649755.html
View Details