首页 开发编程 正文

php怎么循环数组

$aVal=array();$aVal[key1][var2]="somethingelse";(object)$oVal="";$y=(object)null;//同上$z=(object)'a';//创建属性'scalar'='a'$a=(object)array('property1'=>classCTest{public...

php怎么循环数组,PHP如何创建空对象?

引言

我们已经习惯在框架里编写类库接口,使用面向对象的方式构建规模以上的应用程序。但是还有很多机会,时时刻刻与PHP数组打交道。

PHP版本迭代并加入的对象操作特性非常丰富。今天我们来说一说最基础的PHP空对象,怎么使用,以及注意事项。

学习时间

如果是数组,我们可能这样存储数据:

$aVal = array();

$aVal[key1][var1] = "something";

$aVal[key1][var2] = "something else";

那么有没有办法像下面这样操作数据呢?

(object)$oVal = "";

$oVal->key1->var1 = "something";

$oVal->key1->var2 = "something else";

当然了,这个是伪代码。PHP中自带了 stdClass 对象,声明空对象使用下面的方法:

$x = new stdClass();

stdClass是默认的PHP对象。stdClass没有属性,方法或父级。它不支持魔术方法,并且不实现任何接口。

当将标量或数组转换为Object时,将获得stdClass的实例。只要需要通用对象实例,就可以使用stdClass。

创建 stdClass 的示例,可以使用下面的任意方式:

$x = new stdClass;

$y = (object) null; // 同上

$z = (object) 'a'; // 创建属性 'scalar' = 'a'

$a = (object) array('property1' => 1, 'property2' => 'b');

你需要格外注意:

stdClass不是基类! PHP类不会自动从任何类继承。 所有类都是独立的,除非它们显式扩展了另一个类。 在这方面,PHP与许多面向对象的语言不同。

你无法在代码中定义名为“ stdClass”的类。 该名称已被系统使用。 你可以定义一个名为“Object”的类。也可以定义一个扩展stdClass的类,但不会获得任何好处,因为stdClass不执行任何操作。

再举一个例子:

class CTest { public $property1; } $t = new CTest; var_dump($t instanceof stdClass); // false var_dump(is_subclass_of($t, 'stdClass')); // false echo get_class($t) . "\n"; // 'CTest' echo get_parent_class($t) . "\n"; // false (no parent)

注意,PHP的类是独立存在的,上面的 CTest 类也绝不是继承自 stdClass 对象。

写在最后

通过本文,你应该收获一个重要的概念,那就是,PHP 的类除非手动严格指定继承类,否则都是独立存在的。

同时,PHP 提供了标准的 stdClass 对象用于构建空对象。操作数据时可以不用像数组那样了。但是,抛开数组,你讲很大程序上享受不到PHP带来的数据操作便利。

Happy coding :_)

我是 @程序员小助手 ,持续分享编程知识,欢迎关注。

如何比较两个PHP多维数组?

判断两个多维数组是否相等,或有哪些元素区别。我们可以通过PHP中array_udiff()函数和create_function()方法、strcmp ()等函数来实现比较。

下面我们就结合具体的代码示例,给大家介绍比较两个二维数组的方法。

代码示例如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

<?php

//多维数组比较

$color1 = array(array('Red',80),array('Green',70),array('white',60));

$color2 = array(array('Green',70),array('Black',95));

$color = array_udiff($color1,$color2,create_function(

'$a,$b','return strcmp(implode("",$a),implode("",$b));')

);

echo "<pre>";

print_r($color);

此段代码中,我们就可以得出$color1数组相对于$color2数组有哪些不同的数组元素。

输出比较结果如下:

ff44dfd3ad9a71ec1976a4de9a645c9.png

函数介绍:

1、array_udiff : 用回调函数比较数据来计算数组的差集

1

array_udiff ( array $array1 , array $array2 [, array $... ], callable $value_compare_func ) : array

使用回调函数比较数据,计算数组的不同之处。和 array_diff() 不同的是,前者使用内置函数进行数据比较。

参数array1表示第一个数组。array2第二个数组。value_compare_func回调对照函数。

在第一个参数小于,等于或大于第二个参数时,该比较函数必须相应地返回一个小于,等于或大于 0 的整数。

callback ( mixed $a, mixed $b ) : int

返回值,返回 array1 里没有出现在其他参数里的所有值。

2、create_function:创建一个匿名函数

1

create_function ( string $args , string $code ): string

根据传递的参数创建匿名函数,并为其返回唯一名称。

通常这些参数将作为单引号分隔的字符串传递。使用单引号字符串的原因是为了保护变量名称不被解析,否则,如果使用双引号,则需要转义变量名称,例如\ $ avar。

args表示函数参数。code表示功能代码。

返回值是以字符串或FALSE错误形式返回唯一函数名称。

3、strcmp :二进制安全字符串比较

1

strcmp ( string $str1 , string $str2 ) : int

注意该比较区分大小写。

参数str1表示第一个字符串。str2表示第二个字符串。

返回值是如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。

4、implode:将一个一维数组的值转化为字符串

本篇文章就是关于比较两个PHP多维数组的方法介绍,也很简单易懂,希望对需要的朋友有所帮助!

PHP多维数组根据值搜索对应的键?

引言

我们讲解了很多种PHP数组操作的引用场景。今天我们接着分享这方面的知识,说一说对于多维数组,如何根据值搜索,并返回数组的索引值。

学习时间

最开始我们习惯于跟随本能写代码,下意识地开始用 for 循环,对数组进行遍历,然后挨个比对,如果值相等,就返回索引值,如果没有匹配上,就是不存在。

假如原始数组是如下图一样的关联数组。

程序逻辑很简单,我们使用代码实现一下:

function searchForId($id, $array) { foreach ($array as $key => $val) { if ($val['uid'] === $id) { return $key; } } return null; }

这个函数接收一个值,与数组,如果匹配上就将数组的索引返回,如果不存在则返回 null。因为第一层结构没有手动指定索引值,所以默认是从0开始的数字索引。

使用起来是这样的:

$id = searchForId('100', $userdb);

执行结束后,输出应该为0。

当然了,上面写的函数具有通用性,对于特殊的案例,我们应该随机应变。对于上述 $userdb 关联数组的结构,显然,使用PHP内置的函数操作起来,更为直观和快捷。

我们只需要先把 uid 列的元素全部取出,因为上层结构是默认数字索引,所以此处不用手动指定索引值;然后,在提取的数组中搜索值,使用 array_search 执行返回键。

总结为代码,就一行:

$key = array_search('100', array_column($userdb, 'uid'));

执行结果跟上面的 searchForId 函数一致。

深入讨论

上面的函数和第二个解决方法会有问题,就是仅仅返回了第一个匹配的键。像下面这样写,肯定问题不大:

$key = array_search(40489, array_column($userdb, 'uid'));

但是如果在数组中有重复的值,而 uid 列也不唯一,要把所有的匹配结果都返回,该怎么做呢?不会又要修改 searchForId 函数,重新倒腾?

其实大可不必,PHP提供了这样的功能,只需改用 array_keys 函数即可:

$keys = array_keys(array_column($userdb, 'uid'), 40489);

你肯定经常使用 array_keys 函数用于返回整个数组的键,但是它的第二个参数,恰恰是在指定时,拥有可搜索的功能。这确实有些冷门。

再进一步。

上面返回的是数组对应的键,那如果想要键和值一并关联返回,一行代码能搞定吗?可以的,修改一下就行了,使用 array_combine 函数将键和值组装起来返回:

$keys = array_keys(array_combine(array_keys($userdb), array_column($userdb, 'uid')),40489);

写在最后

本文通过特定的数组搜索需求,延伸到手动造轮子,把特殊的特性推向一般,并使用PHP内置的数组处理函数,进行功能裁切,简洁而高效。善用数组函数是硬功夫。

Happy coding :_)

我是 @程序员小助手 ,持续分享编程知识,欢迎关注。

php处理二维数组的方法是什么?

傻孩子,怎么处理一维就怎么处理二维啊,一维数组使用for循环或foreach,那么二维就for里面套一个for呗(虽然这样会有些慢,但怎么能更快需要根据实际情况考虑的),话不多说上代码:

var arr = [

['张三', 21, '实习生'],

['李四', 25, '工程师'],

['王五', 31, '项目经理']

];

for(var i = 0; i < arr.length; i++){

for(var j = 0; j < arr[i].length; j++){

console.log(arr[i][j]);

}

}

看结果:

(其实这是一段js的Demo,我觉着写js的console比PHP的echo更方便,实现思路其实是一样的)

php使用什么函数可以求得数组的大小?

php如何获取一维数组的长度,使用php函数count(),或是sizeof();示例如下:

$arr = Array('0','1','2','3','4'); echo count($arr);// 输出 5$arr = array('A','B','C');echo sizeof($arr);//输出3多维数组:

$arr=array(0=>array('title' => '新闻1', 'viewnum' => 123, 'content' => '内容1'),1=>array('title' => '新闻2', 'viewnum' => 99, 'content' => '内容2'));echo '不统计多维数组:'.count($arr,0); echo '或用sizeof为'.sizeof($arr,0);echo "";echo '统计多维数组:'.count($arr,1);echo '或用sizeof为'.sizeof($ar

本文转载自互联网,如有侵权,联系删除