<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>精東·博客 &#187; PHP</title>
	<atom:link href="http://www.wemvc.com/tag/php/feed" rel="self" type="application/rss+xml" />
	<link>http://www.wemvc.com</link>
	<description>男人的胸怀是委屈撑大的。</description>
	<lastBuildDate>Tue, 10 Jan 2012 04:26:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>PHP5对象迭代(Object Iteration)</title>
		<link>http://www.wemvc.com/1230.html</link>
		<comments>http://www.wemvc.com/1230.html#comments</comments>
		<pubDate>Mon, 31 May 2010 10:13:19 +0000</pubDate>
		<dc:creator>精东</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Object Iteration]]></category>

		<guid isPermaLink="false">http://www.wemvc.com/?p=1230</guid>
		<description><![CDATA[PHP5提供一个为对象定义通过一连串的消息被重述的途径成为可能，例如使用一个foreach语句。默认地，所有可见的属性将用来迭代(反复)。
简单的对象迭代(Simple Object Iteration)
PHP代码如下:

&#60;?php
class MyClass
&#123;   public $var1 = 'value 1';
    public $var2 = 'value 2';
    public $var3 = 'value 3';
    protected $protected = 'protected var';
    private   $private   = 'private var';
    function iterateVisible&#40;&#41; 
   [...]]]></description>
		<wfw:commentRss>http://www.wemvc.com/1230.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>深入理解Magento – 第七章 – 自定义Magento系统配置</title>
		<link>http://www.wemvc.com/1030.html</link>
		<comments>http://www.wemvc.com/1030.html#comments</comments>
		<pubDate>Thu, 20 May 2010 04:46:35 +0000</pubDate>
		<dc:creator>精东</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[Magent]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[电子商务]]></category>

		<guid isPermaLink="false">http://www.wemvc.com/?p=1030</guid>
		<description><![CDATA[Magento拥有十分强大的后台管理系统。作为一名开发人员，这套后台管理系统可以让你的用户简单直接的配置Magento系统或者你创建的模块。和Magento的其他功能一样，你第一次使用这套管理系统的时候可能觉得很麻烦，但是一旦你上手了，你会发现它强大的功能是那么吸引人。那么让我们开始吧。我们这一章的例子依然是基于Helloworld模块。

添加系统配置文件
首先我们要为模块添加一个系统配置文件。这个文件和“config.xml”是不搭界的

app/code/local/Zhlmmc/Helloworld/etc/system.xml

	和全局配置（global config）相似，系统配置也是单独存储的。我们可以通过下面这段代码来获取系统配置文件

//header('Content-Type: text/xml');         
	header&#40;'Content-Type: text/plain'&#41;;         
	echo $config = Mage::getConfig&#40;&#41;
	-&#62;loadModulesConfiguration&#40;'system.xml'&#41;        
	-&#62;getNode&#40;&#41;
	-&#62;asXML&#40;&#41;;          
	exit;

	你可以把这段代码放到任何执行函数（Action Method）中。“loadModulesConfiguration”方法会搜索所有配置好的模块的“etc”文件夹，寻找以传入的参数为名字的文件，在这个例子中是“system.xml”。Magento有很多不同的配置文件，比如api.xml， wsdl.xml， wsdl2.xml， convert.xml， compilation.xml， install.xml。你可以为你创建的模块创建这些配置文件。
添加一个标签页
我们首先在后台系统管理页面添加一个标签页（Tab）。标签页就是后台“System->Configuration”页面左侧的导航栏。默认的标签页有General，Catalog，Customers，Sales，Services等等。我们来创建一个新的标签页叫做“Hello Config”。创建如下文件

Location: app/code/local/Zhlmmc/Helloworld/etc/system.xml
	&#60;config&#62;
	    &#60;tabs&#62;
	 [...]]]></description>
		<wfw:commentRss>http://www.wemvc.com/1030.html/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>深入理解Magento – 第六章 – 高级Magento模型</title>
		<link>http://www.wemvc.com/1028.html</link>
		<comments>http://www.wemvc.com/1028.html#comments</comments>
		<pubDate>Thu, 20 May 2010 04:44:57 +0000</pubDate>
		<dc:creator>精东</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[电子商务]]></category>

		<guid isPermaLink="false">http://www.wemvc.com/?p=1028</guid>
		<description><![CDATA[我们讲过Magento有两种模型，简单模型和EAV（Entity Attribute Value）模型。上一章我们讲过所有的Magento模型都是继承自Mage_Core_Model_Abstract / Varien_Object。简单模型和EAV模型的区别在于资源模型（Model Resource）。虽然所有的资源模型都最终继承“Mage_Core_Model_Resrouce_Abstract”，但是简单模型是直接继承“Mage_Core_Model_Mysql4_Abstract”，而EAV模型是直接继承“Mage_Eav_Model_Entity_Abstract”。
	Magento这么做是由它的道理的。对于大部分开发人员或者用户来说，他们只需要知道一系列的方法能够操作模型，获得数据，数据到底是如何存储的并不是很重要。

什么是EAV模型？
Wikipedia是这么定义的：
	    EAV（Entity-Attribute-Value）模型，也作Object-Attribute-Value模型或者开放模型是一种数据模型。这种数据模型常常用在一个对象的属性数目不是一定的情况下。在数学上，这种模型称为松散矩阵。
	换一种方式理解，EAV模型就是数据表的一种泛化。在传统的数据库中，数据表的列的数量是一定的

+——————+ 
	&#124; products         &#124;  
	+——————+ 
	&#124; product_id       &#124;  
	&#124; name             &#124;  
	&#124; price     [...]]]></description>
		<wfw:commentRss>http://www.wemvc.com/1028.html/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>深入理解Magento – 第五章 – Magento资源配置</title>
		<link>http://www.wemvc.com/1026.html</link>
		<comments>http://www.wemvc.com/1026.html#comments</comments>
		<pubDate>Thu, 20 May 2010 04:43:56 +0000</pubDate>
		<dc:creator>精东</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[电子商务]]></category>

		<guid isPermaLink="false">http://www.wemvc.com/?p=1026</guid>
		<description><![CDATA[对于任何一个更新频繁的项目来说，保持开发环境和生产环境的数据库同步是件很头疼的事情。Magento提供了一套系统，用版本化的资源迁移脚本来解决这个问题。
	上一章，我们为 Helloworld Blogpost 创建了一个模型。我们直接通过SQL语句“CREATE TABLE”来创建数据表。在这一章，我们将为Helloworld模块创建一个资源配置（Setup Resource）用于创建数据表。我们也会创建一个模块升级脚本，用来升级已经安装的模块。下面是我们要做的步骤

在配置文件中添加资源配置
创建资源类文件
创建安装脚本
创建升级脚本
添加资源配置


修改Helloworld模型的config.xml

&#60;resources&#62;
    &#60;!-- ... --&#62;
    &#60;helloworld_setup&#62;
        &#60;setup&#62;
            &#60;module&#62;Zhlmmc_Helloworld&#60;/module&#62;
            &#60;class&#62;Zhlmmc_Helloworld_Model_Setup_Mysql4_Setup&#60;/class&#62;
        [...]]]></description>
		<wfw:commentRss>http://www.wemvc.com/1026.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>深入理解Magento – 第四章 – 模型和ORM基础</title>
		<link>http://www.wemvc.com/1022.html</link>
		<comments>http://www.wemvc.com/1022.html#comments</comments>
		<pubDate>Thu, 20 May 2010 04:41:37 +0000</pubDate>
		<dc:creator>精东</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[电子商务]]></category>

		<guid isPermaLink="false">http://www.wemvc.com/?p=1022</guid>
		<description><![CDATA[对于任何一个MVC架构，模型（Model）层的实现都是占据了很大一部分。对于Magento来说，模型占据了一个更加重要的位置，因为它常常包含了一部分商业逻辑代码（可以说它对，也可以说它错）。这些代码在其他的MVC框架中往往出现在控制器或者帮助函数中。
传统的PHP MVC架构中的模型
本来MVC的定义就不是很清晰，不同的人有不同的看法，而对于模型的定义争议就更多了。在MVC模式被广泛采用之前，PHP程序员往往通过SQL语句直接操作数据库。也有些程序员通过一个SQL抽象层来操作数据库（比如AdoDB）。程序员往往关注SQL语句本身，而不是和数据相关的对象。
	虽然直接操作SQL的方式一直被病诟，但是很多PHP框架还是以SQL为中心的。模型层提供了一系列对象，抽象/封装了数据操作，但是程序员最终还是需为模型层对象写SQL语句操作数据库。

	还有一些框架回避了SQL，使用了对象关系映射（Object Relational Mapping，ORM）来解决这个问题。使用这个方法的话，程序员不用关注SQL，而只需要和对象打交道。我们可以操作一个对象的属性，当“Save”方法被调用的时候，对象的属性会作为数据自动的被写入数据库。有些ORM框架会根据数据表的信息自动推测对象的属性，也有框架要求用户显示的生命对象属性和表的关系。比较有名的ORM框架有ActiveRecord等等。【注：ActiveRecord源自Ruby on Rails，不过现在PHP也有了】
	关于ORM的概念，我就解释到这里。但是和许多计算机领域的其他概念一样，ORM的定义也越来越模糊了。我不想在这片文章中讨论关于ORM的争议，所以我说的ORM就是那个最基本的ORM概念。
Magento的模型
Magento理所当然的也追随潮流应用了ORM。虽然Magento自带的Zend框架提供了SQL抽象层，但是在大多数情况下我们将通过Magento自带的模型和我们自己的模型来进行数据访问。他和视图层（View）一样，Magento的模型层也不是简单的ORM，而是一个高度灵活，高度抽象甚至有点令人费解。
解剖Magento的模型
大部分的Magento模型分为两类。第一类是基本的ActiveRecord类型，一张表一个对象的模型。第二类是Entity Attribute Value（EAV）模型。【注：EAV翻译成“实体属性值”有点词不达意，还是就叫EAV的好】Magento自己定义了一个数据类型叫做模型集合（Model Collection）。顾名思义，模型集合就是一个对象里面包含了很多模型对象。Magento的创造者Varien团队实现了PHP类库的标准接口，“IteratorAggregate”，“Countable”。这样模型集合就能调用这些方法，这也是模型集合和数组的区别。
	Magento的模型并不直接访问数据库。每一个模型都有一个资源模型（Resource Model），每一个资源模型拥有两个适配器（Adapter），一个读，一个写。这样的话逻辑模型和数据库访问就分开了，所以从理论上讲更改底层数据库只需要重写适配器就可以了，所有上层代码都不需要更改。
	创建一个基本模型
	继续我们Hello World的例子。在Hello World模块中创建BlogController.php如下

class App_Helloworld_BlogController extends Mage_Core_Controller_Front_Action &#123; 
    public function indexAction&#40;&#41;          
    &#123; 
        echo 'Hello Blog'; 
    &#125; 
&#125;

	访问以下URL

http://127.0.0.1/Magento/helloworld/blog

	你应该看到“Hello Blog”输出。
创建数据表
我们可以通过Magento自带的方法创建或者修改数据库，但是为了不引入过多新内容，我们暂且手工创建一张表。在你的数据库中执行以下语句

CREATE [...]]]></description>
		<wfw:commentRss>http://www.wemvc.com/1022.html/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>深入理解Magento – 第三章 – Magento的布局(Layout)，块(Block)和模板(Template)</title>
		<link>http://www.wemvc.com/1020.html</link>
		<comments>http://www.wemvc.com/1020.html#comments</comments>
		<pubDate>Thu, 20 May 2010 04:40:14 +0000</pubDate>
		<dc:creator>精东</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[电子商务]]></category>

		<guid isPermaLink="false">http://www.wemvc.com/?p=1020</guid>
		<description><![CDATA[我们接着研究Magento。根据我们第二章讲的Magento MVC的架构，我们接下来应该讲模型（Model），但是我们跳过模型先来看布局和块。和一些流行的PHP MVC架构不同的是，Magento的执行控制器不直接将数据传给试图，相反的视图将直接引用模型，从模型取数据。这样的设计就导致了视图被拆分成两部分，块（Block）和模板（Template）。块是PHP对象，而模板是原始PHP文件，混合了XHTML和PHP代码（也就是把PHP作为模板语言来使用了）。每一个块都和一个唯一的模板文件绑定。在模板文件phtml中，“$this”就是指该模板文件对应的快对象。
	让我们来看一个例子

File: app/design/frontend/base/default/template/catalog/product/list.phtml

	你将看到如下代码

&#60;?php $_productCollection=$this-&#62;getLoadedProductCollection&#40;&#41; ?&#62;
&#60;?php if&#40;!$_productCollection-&#62;count&#40;&#41;&#41;: ?&#62;
&#60;p class=&#34;note-msg&#34;&#62;&#60;?php echo $this-&#62;__&#40;'There are no products matching the selection.'&#41; ?&#62;&#60;/p&#62;
&#60;?php else: ?&#62;

	这里“getLoadedProductCollection”方法可以在这个模板的块对象“Mage_Catalog_Block_Product_List”中找到

File: app/code/core/Mage/Catalog/Block/Product/List.php
...
public function getLoadedProductCollection&#40;&#41;
&#123;
    return $this-&#62;_getProductCollection&#40;&#41;;
&#125;   
...

	块的“_getProductCollection”方法会实例化模型，并读取数据然后返回给模板。

嵌套块
Magento把视图分离成块和模板的真正强大之处在于“getChildHtml”方法。这个方法可以让你实现在块中嵌套块的功能。顶层的块调用第二层的块，然后是第三层……这就是Magento如何输出HTML的。让我们来看一下单列的顶层模板

File: app/design/frontend/base/default/template/page/1column.phtm



&#60;?php
/**
 * Template for Mage_Page_Block_Html
 */
?&#62;
&#60;!DOCTYPE html PUBLIC &#34;-//W3C//DTD XHTML 1.0 Strict//EN&#34; &#34;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&#34;&#62;
&#60;html xmlns=&#34;http://www.w3.org/1999/xhtml&#34; xml:lang=&#34;&#60;?php echo $this-&#62;getLang&#40;&#41; ?&#62;&#34; lang=&#34;&#60;?php echo $this-&#62;getLang&#40;&#41; ?&#62;&#34;&#62;
&#60;head&#62;
&#60;?php echo $this-&#62;getChildHtml&#40;'head'&#41; [...]]]></description>
		<wfw:commentRss>http://www.wemvc.com/1020.html/feed</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>深入理解Magento – 第二章 – Magento请求分发与控制器</title>
		<link>http://www.wemvc.com/1016.html</link>
		<comments>http://www.wemvc.com/1016.html#comments</comments>
		<pubDate>Thu, 20 May 2010 04:37:29 +0000</pubDate>
		<dc:creator>精东</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[电子商务]]></category>

		<guid isPermaLink="false">http://www.wemvc.com/?p=1016</guid>
		<description><![CDATA[Model-View-Controller (MVC) ，模型-视图-控制器，源于Smalltalk编程语言和Xerox Parc。现在有很多系统是基于MVC架构的，不同的系统MVC的实现也略有不同，但都体现了MVC的精髓，分离数据，业务逻辑和显示逻辑。最常见的PHP MVC框架是这样的
	

URL请求被一个PHP文件拦截，通常称为前端控制器（Front Controller）
这个PHP文件分析这个URL，获得一个执行控制器（Action Controller）的名字和一个执行方法（Action Method）的名字，这个过程通常称为路由（Routing）
实例化#2获得的执行控制器
调用执行控制器的执行方法
执行方法中处理业务逻辑，比如获取数据
执行控制器负责把数据传递给显示逻辑
显示逻辑生成HTML


这个架构相对于传统的“每个php都是一个页面”来讲已经是一个巨大的飞跃，但还是有人抱怨【注： CodeIgniter就是这样一个MVC框架】

前端控制器仍然以全局的方式运行
基于配置的惯例导致了系统不够模块化

URL Routing不够灵活
控制器往往和视图绑定
更改默认设置往往导致大量的重构



Magento创造了一个更抽象的MVC来解决上述问题。
	

URL请求被一个PHP拦截
这个PHP文件实例化一个Magento对象
Magento对象实例化前端控制器
前端控制器实例化全局配置中指定的路由对象，可以是多个
路由对象会逐个与请求URL匹配
如果发现匹配，那么可以获得一个执行控制器和一个执行方法的名字
实例化#6获得的执行控制器，并调用相应的执行方法
执行方法中处理业务逻辑，模型数据
控制器实例化布局对象（Layout）
布局对象根据请求的参数，系统配置创建一个块对象（Block）列表，并实例化
布局对象会调用块对象的output方法生成HTML。这是一个递归的过程，因为块对象可以嵌套块对象
每一个块对象都和一个模板文件（Template File）对应。块对象包含了显示逻辑，模板文件包含了HTML和PHP输出代码
块对象直接从模型那里获得数据，换句话说，在Magento的MVC架构中，控制器并不直接把数据传给视图

这里很复杂，我们以后会详细解释每一个部分。我们先关注“前端控制器->路由对象->执行控制器”部分。
Hello World示例
我们讲了太多理论，现在让我们来实践一下，通过实践来加深理解。下面是我们将要做的事情

创建一个Hello World模块
为这个模块配置路由
为这个模块创建执行控制器

创建Hello World模块
首先，我们要创建一个模块的目录结构，这个我们以前已经做过了，就不再熬述

app/code/local/App/Helloworld/Block 
app/code/local/App/Helloworld/controllers 
app/code/local/App/Helloworld/etc 
app/code/local/App/Helloworld/Helper 
app/code/local/App/Helloworld/Model 
app/code/local/App/Helloworld/sql


下面是config.xml的内容

PATH: app/code/local/App/Helloworld/etc/config.xml
&#60;?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34;?&#62;
&#60;config&#62;    
    &#60;modules&#62;
        &#60;App_Helloworld&#62;
            &#60;version&#62;0.2.0&#60;/version&#62;
      [...]]]></description>
		<wfw:commentRss>http://www.wemvc.com/1016.html/feed</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>深入理解Magento – 第一章 – Magento强大的配置系统</title>
		<link>http://www.wemvc.com/1011.html</link>
		<comments>http://www.wemvc.com/1011.html#comments</comments>
		<pubDate>Thu, 20 May 2010 04:33:20 +0000</pubDate>
		<dc:creator>精东</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[电子商务]]></category>

		<guid isPermaLink="false">http://www.wemvc.com/?p=1011</guid>
		<description><![CDATA[Magento的配置系统就像是Magento的心脏，支撑着Magento的运行。这套配置系统掌管着几乎所有“module/model/class/template/etc”。它把整个Magento系统抽象出来，用一个配置文件来描述。这里的“配置文件”并不是一个物理上存在的文件，而是Magento根据当前的系统状态动态生成的一段XML。大多数的PHP开发者并不习惯于这样抽象层，因为它增加的编程的复杂性。但是这样的抽象提供了无与伦比的灵活性，允许你覆盖几乎任何系统的默认行为。
	首先，让我们写一个简单的插件来看看这个所谓的“配置文件”长什么样。虽然我已经提供的现成的代码，但是还是建议你自己建立这个插件，把整个流程走一遍有助于你的理解。

设置插件的目录结构
我们将要创建一个Magento的模块【注： Magento的插件不叫plug-in，叫module，翻译成模块】。Magento的模块由php和xml文件组成，目的是扩展或者覆盖系统的行为，比如为订单增加数据模型，更改一个类的方法，或者增加一个全新的功能。【注：Magento自带的那些功能也都是基于模块的，比如用户注册，商品展示，结账流程等等。Magento给我的感觉就是一切皆模块，和Eclipse的插件体系结构有点像】
	大多数Magento的系统模块的结构和我们将要构建的插件的结构是一样的。Magento的系统模块在以下目录
	

app/code/core/Mage


	每一个子目录都是一个单独的模块。这些模块是由Magento官方开发的。我们安装完Magento以后，所使用的功能就是来自这些模块。我们自己创建的模块应该放在如下目录
	

app/code/local/Packagename


	“Packagename”应该是一个唯一的字符串，用来标识你的代码。通常人们使用公司名字作为Packagename，比如
	

app/code/local/Microsoft


	由于我在做我自己的Magento项目，我将使用我自己的项目名“App”。 然后，我们要创建以下目录结构

app/code/local/App/Configviewer/Block
app/code/local/App/Configviewer/controllers
app/code/local/App/Configviewer/etc
app/code/local/App/Configviewer/Helper
app/code/local/App/Configviewer/Model
app/code/local/App/Configviewer/sql

	你的插件并不一定需要包含以上所有的目录，但是为了以后开发方便，我们还是在一开始就把目录创建好。接下来我们要创建两个文件，一个是config.xml，放在etc目录下面

app/code/local/App/Configviewer/etc/config.xml

	文件内容如下

&#60;config&#62;
    &#60;modules&#62;
        &#60;App_Configviewer&#62;
            &#60;version&#62;0.1.0&#60;/version&#62;
        &#60;/App_Configviewer&#62;
    &#60;/modules&#62;
 &#60;/config&#62;

	第二个文件需要在如下位置创建

app/etc/modules/App_Configviewer.xml

	第二个文件应该遵循如下命名规则“Packagename_Modulename.xml”，文件内容如下

        &#60;config&#62;
	    &#60;modules&#62;
	    [...]]]></description>
		<wfw:commentRss>http://www.wemvc.com/1011.html/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>PHP操作数组相关函数</title>
		<link>http://www.wemvc.com/679.html</link>
		<comments>http://www.wemvc.com/679.html#comments</comments>
		<pubDate>Tue, 09 Dec 2008 05:34:00 +0000</pubDate>
		<dc:creator>精东</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[array]]></category>

		<guid isPermaLink="false">http://www.wemvc.com/?p=679</guid>
		<description><![CDATA[range($low, $high),range($low, $high, $step);//创建顺序值的数组如:range(1,4)为(1,2,3,4)又如range(&#8216;a&#8217;,'z&#8217;)
each($array)按顺序返回数组的当前元素,并且将下一个元素设置为当前元素;
reset($array)将数组当前元素重新设置到数组开始处
list()可以用来将一个数组分解为一系列的值,如 list($a,$b)=each($array)
shuffle($array),array_rand($arg, $num_req);对数组随机排序
array_reverse($input),array_reverse($input, $preserve_keys)   返回原数组的反向排序
sort($array);对数组排序
PHP数组是一个重要的概念,它包含有大量的函数,方便人们的开发…现将它的数组分类,以方便查询及应用.
先说说PHP数组的定义…PHP数组包含两个项,key和value,可以通过key来获取相应的value,其中key又可以是数值和关联的,如$array[0],$array[one]…
创建数组
PHP中的数组声明跟其它语言的也有点小小的差别,但一样可以声明为一维,两维,三维及多维等,如
$array[0] = 1,$array = array(1,2,3); 一维数组,只包括三个值,属于数值型数组,引用时可用$array[0]来代表1,创建数值数组时可以省略索引.

$array = array&#40;
   1 =&#62; “one”,
   2 =&#62; “two”,
   3 =&#62; “three”,
   4 =&#62; array&#40;
    “one” =&#62; 1,
    “two” =&#62; 2,
    “three” =&#62; 3
 [...]]]></description>
		<wfw:commentRss>http://www.wemvc.com/679.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>php如何使用ftp &amp; sftp来上传文件</title>
		<link>http://www.wemvc.com/443.html</link>
		<comments>http://www.wemvc.com/443.html#comments</comments>
		<pubDate>Wed, 15 Oct 2008 09:23:23 +0000</pubDate>
		<dc:creator>精东</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[ftp]]></category>

		<guid isPermaLink="false">http://www.wemvc.com/?p=443</guid>
		<description><![CDATA[最近公司有个项目，是将本地生成的文件使用ftp传递到另外一台服务器上。
分析需求，无非就是跑出个csv文件，然后再将文件使用php的ftp相关函数传递到ftp服务器上。
总不能让客服天天定点用ftp工具从这个服务器上拉到那个服务器上吧？。。。
so，先温习下相关知识，点这里，多了不说了。
ps：有人愿意使用第三方类库，如果你不嫌麻烦，你去用好了，pear的net_ftp里的方法我看比php自带的函数不少多少。
第一步：确信你拥有连接／上传到FTP服务器的权限
无聊嘛？不无聊，有很多人就是写了半天，测了几天，浪费N天，最后傻乎乎的在那笑说，哦原来我没权限。。。
先用命令行测试下：
我的是mac,用Terminal,Linux上也有，没有的用cmd，不过自己先查下命令是啥。
ftp&#62; open ftp.xxxx.com
Connected to ftp.xxxx.com.
220-FileZilla Server version 0.9.24 beta
220-written by Tim Kosse (Tim.Kosse@gmx.de)
220 Please visit http://sourceforge.net/projects/filezilla/
Name (www.sasacity.loc:Joshua): joshua
331 Password required for joshua
Password:
230 Logged on
Remote system type is UNIX.
ftp&#62; bin
200 Type set to I
ftp&#62; hash
Hash mark printing on (1024 bytes/hash mark).
ftp&#62; put ~/Documents/hosts host
local: /Users/Joshua/Documents/hosts remote: host
200 Port command successful
150 Opening data channel for file transfer.
#
226 [...]]]></description>
		<wfw:commentRss>http://www.wemvc.com/443.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

