首页 开发编程 正文

php怎么把二位数组

(object)$oVal="";$y=(object)null;//同上$z=(object)'a';//创建属性'scalar'='a'$a=(object)array('property1'=>...

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获取数组键名和键值?

直接用键名获取,比如:$a = array('name'=>'admin');你知道键名是name,那么直接输出:echo $a['name']就行了。

PHP

PHP,一个嵌套的缩写名称,是英文超级文本预处理语言(PHP:Hypertext Preprocessor)的缩写。

PHP数组任意位置插入任意元素?

引言

本文我们聊一聊 PHP 数组,如何在任意位置插入新元素。因为内置函数并没有提供类似 array_insert(&$array, $pos, $items) 的函数,所以我们试着动手解决。

学习时间

标准的实现方法,是要用 array_splice,该函数的用法:

array array_splice( array &$input, int $offset[, int $length = 0[, mixed $replacement]] )

把 input 数组中由 offset 和 length 指定的单元去掉,如果提供了 replacement 参数,则用其中的单元取代。

下面是举例说明:

$original = array( 'a', 'b', 'c', 'd', 'e' ); $inserted = array( 'x' ); // $inserted 并不必须是数组 array_splice( $original, 3, 0, $inserted ); // 在索引 3 位置插入 // $original 内容为 a b c x d e

有几个关键点大家需要注意,灵活运用 $offset, $length, $replacement 三个参数,可以组装成强大的功能。

对于偏移位置 $offset:

如果 offset 为正,则从 input 数组中该值指定的偏移量开始移除。如果 offset 为负,则从 input 末尾倒数该值指定的偏移量开始移除。

对于替换的长度 $length:

如果省略 length,则移除数组中从 offset 到结尾的所有部分。如果指定了 length 并且为正值,则移除这么多单元。如果指定了 length并且为负值,则移除从 offset 到数组末尾倒数length 为止中间所有的单元。

在编程中,当给出了replacement 时要移除从 offset 到数组末尾所有单元时,用 count($input) 作为 length。比如像下面这个示例:

$input = array("red", "green", "blue", "yellow"); array_splice($input, 1, count($input), "orange"); // $input = array("red", "orange")

特别需要注意的是 $replacement 参数:

如果给出了 replacement 数组,则被移除的单元被此数组中的单元替代。如果 offset 和 length 的组合结果是不会移除任何值,则 replacement 数组中的单元将被插入到 offset 指定的位置。 注意替换数组中的键名不保留。如果用来替换 replacement 只有一个单元,那么不需要给它加上array(),除非该单元本身就是一个数组、一个对象或者 NULL。亲手造轮子

上一节的解决方案堪称标准。有些同学还是要忍不住造轮子。“条条大道通罗马”,肯定有不止一种方式实现需求。下面是另外一种方式:

$a = array(1, 2, 3, 4); $b = array_merge(array_slice($a, 0, 2), array(5), array_slice($a, 2)); // $b = array(1, 2, 5, 3, 4)

使用 array_slice 函数对原数组切片,一分为二,然后使用 array_merge 拼接3个部分。完美!

上面的代码,在使用 array_merge 后悔丢失原数组的索引关系。如果要保留,使用 + 连接:

$b = array_slice($a, 0, 2) + array(5) + array_slice($a, 2);

这样就可以了。

换汤不换药,如果给类添加一个方法,或者添加一个助手函数,自然是极好的。下面是封装函数。

function array_insert(&$array, $value, $index) { return $array = array_merge(array_splice($array, max(0, $index 1)), array($value), $array); }

写在最后

本文介绍了一个功能丰富的 array_splice 函数,让大家领略了参数的灵活运用所带来的便捷。如果你经常需要这样的操作,麻溜地写到全局助手函数里吧。

Happy coding :_)

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

PHP如何获取数组指定值得位置?

如果是一维数组 可以用array_flip 函数 交换数组中的键和值 然后用值获取位置

PHP数组有哪几类?

数组就是一组数据,

很简单的例子, 比如上课的时候我们分为小组学习,小组里面有第1个,第2个第3个第4个人,数组里面也是有第1个数据,第2个数据,第3个数据。我们bye. 这样的一组数据放在一起,就叫做一个数组,用一个变量表示。

数组其实上没有大的类型的区分。细节上的一点分别就是多维数组和一维数组,就是多维数组,就是数组里面含有数组。举个例子,每个年级有10个班,这10个班是一个数组,每个班里面有10个小组,每个小组又是一个数组。

其次就是数组所存放的类型,比如,有的只存放数字,有的只存放数字符串,但其实上没有去专门区分这些内容,因为它可以混合存储。所以严格意义上是没有类别之分的。

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