澳门新浦京电子游戏PHP指定字段的多维数组排序方法

本文由码农网 –
小峰原创,转发请看清文末的转发须要,接待插足大家的付费投稿安排!

php多进程完毕

PHP中的数组援助以数字为索引的符合规律化数组和以字符串为索引的关联数组,在其他编制程序语言中,经常会提供二种数据类型——Array和Map(或然叫Hash卡塔尔国,分开来代表,而在PHP中也便是把那二种数据类型合併成了一个——统称为数组(Array)。

PHP数组排序可以用array_multisort方法完成,不过一旦是多维数组,并且大家要钦定数组中的有个别字段举办排序,那么那就须求大家相依为命写方法完毕了。本文分享了一段PHP钦定字段的多维数组排序方法的代码,这段代码可完成基于田野字段对数组举行排序。

PHP有一组经过调控函数(编译时须求–enable-pcntl与posix扩大卡塔尔国,使得php能在nginx系统中贯彻跟c相通的创造子进程、使用exec函数推行顺序、管理非确定性信号等功效。

常规数组

function sortArrByField(&$array, $field, $desc = false){
  $fieldArr = array();
  foreach ($array as $k => $v) {
    $fieldArr[$k] = $v[$field];
  }
  $sort = $desc == false ? SORT_ASC : SORT_DESC;
  array_multisort($fieldArr, $sort, $array);
}

CentOS 6
下yum安装php的,私下认可是不设置pcntl的,因而需求单独编写翻译安装,首先下载对应版本的php,解压后

制造数组

健康的开创三个数组的措施如下:

$products = array( ‘Tires’, ‘Oil’, ‘Spark Plugs’ );

那就创办了多少个有五个要素的数组$products。

若果你供给一个非正规的数组,它里面包车型地铁因素是升序有规律依次增加的数字,那么能够使用range()机动创造那几个数组,举例:

$numbers = range(1, 10);

那就产生了二个蕴含从1到10的十一个因素的数组$numbers。假如你期待依次增加的上涨的幅度不是暗中认可的1,还能透过可选的第两个参数来钦定步长,举例:

$odds = range(1, 10, 2);

那样就发出了多少个从1到10以内奇数的数组$odds。

而且range()函数也能够应用在字符的依次增加上。

以上正是PHP钦赐字段的多维数组排序方法,希望这段PHP代码对你带给支持。

cd php-version/ext/pcntl 
phpize 
./configure && make && make install 
cp /usr/lib/php/modules/pcntl.so /usr/lib64/php/modules/pcntl.so 
echo "extension=pcntl.so" >> /etc/php.ini 
/etc/init.d/httpd restart 

拜会数组成分

在PHP中采纳数字索引访谈一个数组的方法跟C语言中别无二样,都以行使相符于$arrayvar[index_num]那样的样式寻访,况兼索引以0为发端。

PHP作为八个动态语言,在行使受愚然要比C语言那样的静态编写翻译语言方便广大。对于PHP中的数组来说,你不要求在应用在此之前先行定义,用届时间接动用就能够,要是该数组子虚乌有,就能活动创立。比如上面包车型大巴例证:

$employees[0] = "Tom";
$employees[1] = "Jerry";
$employees[2] = "Ray";

在给数组的率先个要素赋值时,借使数组$employees不设有,就能够自动创设,然后全体第多少个要素。

有利于极了。

遍历数组成分

对此数组来讲,使用循环语句遍历数组成分特别低价。例如对于地方的数组$employees,大家要遍历它的成分列表并打字与印刷出来,如下:

for ($i = 0; $i < count($employees); $i++) 
{
    echo $employees[$i] . " ";
}

针对数组这种数据布局,PHP还特别提供了一个循环语句foreach,例子如下:

foreach ($employees as $employee)
{
    echo $employee . " ";
}

上面是言传身教代码:

关周到组

<?php 
header('content-type:text/html;charset=utf-8' ); 

// 必须加载扩展 
if (!function_exists("pcntl_fork")) { 
 die("pcntl extention is must !"); 
} 
//总进程的数量 
$totals = 3; 
// 执行的脚本数量 
$cmdArr = array(); 
// 执行的脚本数量的数组 
for ($i = 0; $i < $totals; $i++) { 
 $cmdArr[] = array("path" => __DIR__ . "/run.php", 'pid' =>$i ,'total' =>$totals); 
} 
 /* 
展开:$cmdArr 
Array 
( 
 [0] => Array 
 ( 
  [path] => /var/www/html/company/pcntl/run.php 
  [pid] => 0 
  [total] => 3 
 ) 
 [1] => Array 
 ( 
  [path] => /var/www/html/company/pcntl/run.php 
  [pid] => 1 
  [total] => 3 
 ) 
 [2] => Array 
 ( 
  [path] => /var/www/html/company/pcntl/run.php 
  [pid] => 2 
  [total] => 3 
 ) 
) 
*/ 

pcntl_signal(SIGCHLD, SIG_IGN); //如果父进程不关心子进程什么时候结束,子进程结束后,内核会回收。 
foreach ($cmdArr as $cmd) { 
 $pid = pcntl_fork(); //创建子进程 
 //父进程和子进程都会执行下面代码 
 if ($pid == -1) { 
 //错误处理:创建子进程失败时返回-1. 
 die('could not fork'); 
 } else if ($pid) { 
 //父进程会得到子进程号,所以这里是父进程执行的逻辑 
 //如果不需要阻塞进程,而又想得到子进程的退出状态,则可以注释掉pcntl_wait($status)语句,或写成: 
 pcntl_wait($status,WNOHANG); //等待子进程中断,防止子进程成为僵尸进程。 
 } else { 
 //子进程得到的$pid为0, 所以这里是子进程执行的逻辑。 
 $path = $cmd["path"]; 
 $pid = $cmd['pid'] ; 
 $total = $cmd['total'] ; 
 echo exec("/usr/bin/php {$path} {$pid} {$total}")."n"; 
 exit(0) ; 
 } 
} 
?> 

始建数组

使用上面包车型客车样式创制三个涉嫌数组:

$employees = array('Tom' => 20, 'Jerry' => 22, 'Ray' => 25);

在这里个关全面组中,名字是Key,岁数是Value,通过名字能够一向找到他的年龄。

上述就是那篇小说的全体内容了,希望本文的剧情对大家的就学可能干活有着自然的参阅学习价值,假如有疑问我们能够留言交流,多谢咱们对台本之家的辅助。

访谈数组成分

对此涉嫌数组,使用要素的Key作为目录就足以访谈到成分的Value,如下:

echo $employees['Tom'];
$employees['Ray'] = 26;

无差距于,再第叁遍利用关联数组时,如若不设有,就自行创设。

你大概感兴趣的稿子:

  • PHP
    获取录像时间长度的实例代码
  • PHP多维数组钦命多字段排序的亲自过问代码
  • PHP
    计算多个专门大的整数实例代码
  • PHP生成(帮忙多模板)二维码海报代码
  • PHP达成Huffman编码/解码的演示代码
  • PHP完成数据库的增加和删除查改功用及全体代码
  • phpInfiniti级商量嵌套实今世码
  • 怎么样幸免PHP实例代码中的一些坏代码

遍历数组元素

遍历关联数组的要素,平时常有上面二种艺术:

foreach

foreach ($employees as $name => $age)
{
    echo $name . " - " . $age . "<br />";
}

each

while ($elem = each($employees))
{
    echo $elem['key'] . " - " . $elem['value'] . "<br />";
}

list

reset($employees);  //如果前面的代码也对$employees使用过each操作,那么当前元素可能不是指向第一个,可以使用reset重置到第一个元素
while (list($name, $age) = each($employees))
{
    echo "$name - $age<br />";
}

多维数组

PHP中的多维数组的概念跟其他语言中从不实质的不一样,访问格局也基本一致,我们只是看一下PHP中的多维数组时如何创制的就能够了。

上边是叁个创建二维数组的例证:

$products = array( array( 'TIR', 'Tires', 100 ), 
                   array( 'OIL', 'Oil', 10 ),
                   array( 'SPK', 'Spark Plugs', 4 ));

看得出,我们定义了八个平常化的一维数组,它的每多个要素又是贰个寻常的一维数组,那就重新整合了二维数组。遍历那样叁个二维数组的代码如下:

for ($row = 0; $row < count($products); $row++) {
    for ($column = 0; $column < count($products[$row]); $column++) {
        print '|'.$products[$row][$column]; 
    }
    print "|n"; 
}

雷同,数组的因素得以是涉及数组,如下:

$products = array( array( ‘Code’ => ‘TIR’, 
                          ‘Description’ => ‘Tires’,
                          ‘Price’ => 100 ),
                   array( ‘Code’ => ‘OIL’, 
                          ‘Description’ => ‘Oil’,
                          ‘Price’ => 10 ),
                   array( ‘Code’ => ‘SPK’,
                          ‘Description’ => ‘Spark Plugs’,
                          ‘Price’ =>4 )
                );

遍历那样贰个二维数组的代码如下:

for ( $row = 0; $row < count($products); $row++){
    echo '|'.$products[$row]['Code'].'|'.$products[$row]['Description'].
        '|'.$products[$row]['Price']."|n";
}

叁遍类推,就足以理解怎么创立三维数组、四维数组、…、等等更加的多维的数组了。

数组排序

sort/rsort

这一组排序函数针对一维的例行数组,此中sort函数对数组做升序操作,rsort函数对数组做降序操作。

asort/arsort

这一组排序函数针对一维的关全面组,此中asort函数依照关周密组瓜时素的Value举办升序操作,arsort函数根据关周全组相月素的Value实行降序操作。

ksort/krsort

这一组排序函数针对一维的涉嫌数组,在那之中ksort函数依据关周详组瓜月素的Key实行升序操作,krsort函数依照关周全组凉月素的Key举行降序操作。

usort/uasort/uksort

对此简易的数组成分(数字只怕字符串),PHP知道什么样去相比较它们的分寸,但对此复杂的数组成分(成分又是数组也许目的的情事),PHP就不明了怎么去相比它们的大小了。这是就必要开采者自定义相比较函数,然后使用usort函数来对多维数组开展操作了。

比如照准上边包车型客车二维数组:

$products = array( array( 'TIR', 'Tires', 100 ), 
                   array( 'OIL', 'Oil', 10 ),
                   array( 'SPK', 'Spark Plugs', 4 ));

要是我们盼望以此数组依照元素中的第1个字段(商品描述)进行升序排列,那么应该如何做啊?

先是,我们需求定义一个自定义的可比函数:

function compare($x, $y) {
    if ($x[1] == $y[1]) {
        return 0;
    } else if ($x[1] < $y[1]) {
        return -1;
    } else {
        return 1;
    }
}

下一场就足以动用这几个自定义的可比函数对上述数组进行升序操作了,如下:

usort($products, 'compare');

比如你又希望以此数组依据元素中的第五个字段(商品价位)举办升序操作,那么只须要把比较函数修正成下边那样:

function compare($x, $y) {
    if ($x[2] == $y[2]) {
        return 0;
    } else if ($x[2] < $y[2]) {
        return -1;
    } else {
        return 1;
    }
}

对此多维数组的降序操作,也是透过自定义的可比函数来完结的。举例上述二维数组希望根据商品价位实行降序操作,那么相比较函数定义如下:

function compare($x, $y) {
    if ($x[2] == $y[2]) {
        return 0;
    } else if ($x[2] < $y[2]) {
        return 1;
    } else {
        return -1;
    }
}

足见,是升序依然降序,都以透过根据比较后赶回的数值来调整的:0表示$x和$y相等,负数表示$x小于$y,正数表示$x大于$y。

同理,uasortuksort是指向多维数组中的关联数组进行自定义排序的函数,原理和行使情势跟usort就如,可自行测验,不再赘言。

shuffle

该函数对数组成分举办随机排序。

array_reverse

该函数再次回到二个数组,饱含的成分是输入数组的反序排列,源数组保持不改变。

从文件中加载数组

只要文件中贮存的是布局化的数目,举例订单数量(经常这种布局化的数码存储在关系型数据库中),那么直接把那类数据加载到数组中再举行拍卖就非凡便于,大家得以应用fileexplode那一个函数结合来形成管理公事中的布局化数据。

file函数的原型:
array file ( string $filename [, int $flags = 0 [, resource $context ]] )
explode函数的原型:array explode ( string $delimiter , string $string [, int $limit = PHP_INT_MAX ] )

别的有关数组的操作

数组内的领航

在PHP中,创制的数组维护了三个指南针——指向当前的因素,相像于C语言中的链表。通过操作这么些指针可以随心所欲的遍历数组成分。

当创制了叁个新的数组时,当前线指挥部针指向数组的首先个因素,使用current()函数能够回去当前线指挥部针指向的因素。

使用next()each()函数能够让日前线指挥部针向前移动,它们的分别在于:next()先向前挪动指针,然后重返指针指向的新因素;each()是先再次回到当前线指挥部针指向的要素,然后再前行移动指针。

当指针移动到数组的高级中学级地点时,你可以利用reset()或者end()把如今线指挥部针重新复苏设置到数组的起头(指向第2个要素)或最终(指向最终一个成分卡塔尔,同期会回到第一个成分或最终三个因素。

借使期待反向遍历叁个数组,就能够先使用end()让眼下线指挥部针指向最终二个要素,然后利用prev()函数来向前遍历。prev()函数跟next()函数相呼应,它把前段时间线指挥部针向前挪动,然后回来新的要素。

上面我们看一个反向遍历数组的例子:

$array = array(1, 2, 3);
$value = end($array);
while ($value) {
    echo "$valuen";
    $value = prev($array);
}

针对数组每一个要素调用途理函数

不可枚举,我们会遍历二个数组,对每三个数组成分实行操作或涂改。遍历三个数组有非常多方法:forwhileeach()等等,这里介绍二个愈来愈简明高效的方法:
array_walk(),它的原型如下:

bool array_walk ( array &$array , callable $callback [, mixed $userdata = NULL ] )

array_walk()接收三个自定义函数,用来对数组的每二个要素举行拍卖操作。那一个自定义函数的原型大约样子如下:

yourfunction(value, key, userdata)

首个参数是数组成分的值,第叁个参数是数组成分的Key,第八个参数是在array_walk()调用中钦赐的第三个参数:客户数据。

下边是叁个例子:

<?php
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");

function test_alter(&$item1, $key, $prefix)
{
    $item1 = "$prefix: $item1";
}

function test_print($item2, $key)
{
    echo "$key. $item2<br />n";
}

echo "Before ...:n";
array_walk($fruits, 'test_print');

array_walk($fruits, 'test_alter', 'fruit');
echo "... and after:n";

array_walk($fruits, 'test_print');
?>

数组成分的数码总计

php中,对于数组成分的多寡总计,提供了四个函数:count()sizeof()array_count_values()

其中count()sizeof()的法力完全一致,都以回到数组相月素的数码。

array_count_values()以此函数是对数组中的成分值举办次数总计,把雷同成分的面世次数总括出来,然后再次来到三个关联数组。

咱俩看贰个例子就驾驭了:

<?php
function myprint($value, $key) 
{
    echo "$key: $valuen";
}

$array = array(4, 5, 1, 2, 3, 1, 2, 1);
$ac = array_count_values($array);
array_walk($ac, 'myprint');
?>

运营的结果如下:

4: 1
5: 1
1: 3
2: 2
3: 1

把多少个关周密组转变来普通的变量

对此涉嫌数组,大家能够使用extract()函数把每三个key/value成分转换到三个惯常变量,变量名是数组成分的key,变量值是数组成分的Value。

extract()的原型是:int extract ( array &$array [, int $flags = EXTR_OVERWRITE [, string $prefix = NULL ]] )

通过例子我们领会一下它的用法:

<?php
$size = "large";
$var_array = array("color" => "blue",
                   "size"  => "medium",
                   "shape" => "sphere");
extract($var_array, EXTR_PREFIX_SAME, "wddx");

echo "$color, $size, $shape, $wddx_sizen";

?>

数组$var_array有七个key/value元素,所以通过extract()管理会生成三个常备变量:$color、$size、$shape,但是在后面已经定义了二个变量$size,所以会发出冲突,而extract()函数的第二个参数正是调控在产生冲突时怎么着管理的,这里运用了接纳:EXTR_PREFIX_SAME——表示当现身冲突时经过数组发生的变量会加上前缀,前缀通过extract()的第八个参数钦赐。

发表评论

电子邮件地址不会被公开。 必填项已用*标注