php 打印数组-(基础)数组的解释和使用

2023-08-26 0 1,471 百度已收录

欢迎技术交流的同仁加入

PHP自学交流中心QQ群:153404408

1.1 什么是链表

标量变量是用于存储值的命名区域。 类似地,链表是一个用于存储一系列变量值的命名区域,因此您可以使用链表来组织标量变量。

链表中存储的值称为数组元素。 每个数组元素都有一个关联的索引(也称为键),可用于访问该元素。 在大多数编程语言中,数组都有数字索引,并且此类索引通常从 0 或 1 开始。

1.2 数字索引数组

在PHP中,数字索引的默认值是从0开始,当然,它是可以改变的。

1.2.1 数字索引数组的初始化

$products = array('轮胎', '机油', '火花塞');

与 echo 语句一样,array() 实际上是一个语言构造,而不是一个函数。

根据对链表内容的要求,可能不需要像上面的例子那样手动初始化它们。 如果所需的数据保存在另一个链表中,则可以使用运算符“=”将链表简单地复制到另一个链表。

如果需要将数字按降序保存在链表中,可以使用range()函数手动创建该字段。 以下代码行将创建一个 1 到 10 之间的数字字段: $numbers = range(1,10);

range() 函数有一个可选的第三个参数,允许设置值之间的步长。 例如,要完成 1 到 10 之间素数的链表,可以使用以下代码: $odds = range(1,10,2);

range()函数还可以对字符进行操作,如:$letters = range('a', 'z');

1.2.2 访问链表内容

要访问变量的内容,请直接使用其名称。 如果变量是链表,则可以使用变量名称和关键字或索引的组合来访问其内容。 键或索引将指定我们要访问的变量。 索引包含在变量名称之前的方括号中。

默认情况下,元素 0 是链表的第一个元素。

请注意,虽然 PHP 的字符串解析功能强大且智能,但它们可能会令人困惑。 当你在双冒号括起来的字符串中嵌入链表或其他变量时,如果它们不能被正确解释,你可以将它们放在双引号之外,或者查找第4章中的“字符串操作和正则表达式”以获得更复杂的句型。

就像 PHP 中的其他变量一样,数组不需要预先初始化或创建。 它们是在第一次使用时手动创建的。

1.2.3. 使用循环访问链表

由于形式参数使用有序数字作为索引,因此可以轻松使用 for 循环显示字段的内容。

对于 ($i=0; $i

回显“$产品[$i]”;

使用简单的循环访问每个元素是数字索引数组的一个非常好的功能。 您还可以使用专为字段设计的 foreach 循环。 喜欢:

foreach($产品作为$当前)

回显$当前。 ' ';

1.3 使用不同索引的字段

PHP 还支持相关字段。 在相关字段中,您可以将每个变量值与任何键或索引相关联。

1.3.1 初始化相关字段

如下代码创建一个相关字段,其中产品名称为键,价格为值:

$prices = array( '轮胎'=>100, '机油'=>10, '火花塞'=>4 );

关键字和值之间的符号只是大于和等号。

1.3.2 访问数组元素

同样,变量名和关键字可用于访问链接列表的内容。 例如 $prices['Tires']。

1.3.3 使用循环语句

因为相关字段的索引不是数字,所以无法在for循环语句中使用简单的计数器来对链表进行操作。 但您可以使用 foreach 循环或 list() 和each() 结构。

使用foreach循环语句对相关字段进行操作时,foreach()循环具有不同的结构。 关键字可以按如下方式使用:

foreach($prices 作为 $key => $value)

回显 $key.'=>'.$value.'

';

下面显示的代码将使用each() 构造复制 $prices 字段的内容:

while($element =each($prices))

回声 $element['key'];

回显“-”;

回显 $element['value'];

回声'

';

each() 函数将返回字段的当前元素,并将下一个元素作为当前元素。 因为each()函数是在while循环中调用的,所以它会按顺序返回字段中的每个元素,当到达链表末尾时,循环操作就会停止。

在此代码中,变量 $element 是一个字段。 当调用each()时,它将返回一个包含4个值和4个指向链表位置的索引的字段。 Positions key 和 0 包含当前元素的键,positions value 和 1 包含当前元素的值。 虽然两种方式都没有什么不同,但我们选择使用命名位置而不是数字索引位置。

此外,还有一种更中间和更常见的方法来完成同样的事情。 函数list()可用于将字段分解为一系列值。 函数each()返回的两个值可以按照以下方法分开:list($product,$price) =each($price);

上面的代码使用each()从$prices列表中获取当前元素,将其作为形式参数返回,然后指向下一个元素。 它还使用 list() 将从each() 返回的字段中包含的 0 和 1 元素转换为两个名为 $product 和 $price 的新粗略数量。

我们可以循环整个 $prices 字段并使用如下简单脚本显示其内容:

while(列表($产品, $价格) = 每个($价格))

echo "$产品-$价格

”;

此代码的输出与上述脚本的输出相同,但更易于阅读,因为 list() 允许命名新变量。

需要注意的一点是,使用each()函数时,数组会记录当前元素。 如果要在同一个脚本中两次使用该字段,则必须使用函数reset()将当前元素重置到链表的开头。 要再次遍历价格列表,您可以使用如下代码:

重置($价格);

while(列表($产品,$价格)=每个($价格))

echo "$产品-$价格

”;

1.4 数组运算符

+联合、==相等、===同一、!=不相等、不相等、!==不完全相同。

联合运算符尝试将 $b 中的元素添加到 $a 的末尾。 如果 $b 中的元素与 $a 中的某些元素具有相同的索引,则不会添加它们。 即$a中的元素不会被覆盖。

1.5 多维数组

数组不一定是键和值的简单列表 - 数组中的每个位置还可以保存另一个字段。 使用这些技巧,可以创建一个二维数组。 将二维数组视为矩阵,或具有长度和高度或行和列的网络。

1.6 数组排序

1.6.1 使用sort()函数

sort() 函数区分大小写。 您的所有字母都遵循小写字母。 所以“A”小于“Z”,而“Z”又小于“a”。

该函数的第二个参数是可选的。 此可选参数可以传递 SORT_REGULAR(默认值)、SORT_NUMERIC 或 SORT_STRING。 指定排序类型的能力非常有用,例如,在比较可能包含数字 2 和 12 的字符串时。从物理角度来看,2 大于 12,但作为字符串,'12' 大于‘2’。

1.6.2 使用asort()函数和ksort()函数对相关链表进行排序

函数asort()根据链表每个元素的值进行排序。 ksort() 函数按键而不是按值排序。

1.6.3 逆序排序

函数 rsort() 按升序对一维数字索引数组进行排序。 函数arsort()按照每个元素值的倒序对一维相关链表进行排序。 函数krsort()根据数组元素的key对一维链表进行逆序排序。

php 打印数组-(基础)数组的解释和使用

为了访问一维数组中的数据,需要使用链表的名称和元素的索引。 二维数组与一维数组类似,只是元素有两个索引 - 行和列。

您可以使用双 for 循环来达到相同的效果:

为($行=0;$行

对于($列=0;$列

echo '|'.$products[$row][$column];

回声'|

';

如果将这些代码用于大型链表,会简单很多。

您可能更喜欢创建列名称而不是数字。 您可以使用以下代码:

$products = array ( array ( '代码'=>'TIR', '描述'=>'轮胎', '价格'=>100 ), array ( '代码'=>'OIL', '描述'=>'石油', '价格'=>10 ), array ( '代码'=>'SPK', '描述'=>'火花塞', '价格'=>4 ) };

如果您想检索单个值,使用此字段要容易得多。 请记住,记住以其命名的列中描述的内容比记住所谓的第一列中的内容更容易。 使用描述性索引,无需记住元素存储在 [x][y] 处。 使用一对有意义的行名和列名作为索引可以让您轻松找到所需的数据。

但是,我们不能使用简单的 for 循环按顺序迭代每一列。 可以使用 for 循环遍历外部数字索引数组 $products。 $products 字段的每一行都是具有描述性索引的字段。 在 while 循环中使用each() 和list() 函数,您可以迭代整个内部字段。 因此,需要一个内部有 while 循环的 for 循环。

for ( $row = 0; $row < 3; $row++ }

while (列表($key,$value)=每个($products[$row]))

回显“|$值”;

回声'|

';

三维链表有高度、宽度和深度的概念。 如果您可以轻松地将二维数组想象为具有行和列的表格,那么您可以将三维链表想象为一堆这样的表格。 每个元素都可以按级别、行和列引用。

根据创建多维链表的方式,您可以创建四维、五维或六维链表。 在PHP中,链表维度的数量没有限制,但是人们很难想象小于三个维度的字段。 大多数实际问题逻辑上只需要使用三维或更少维的链表结构。

1.7 多维字段的排序

对多维字段进行排序,或者按字母和数字顺序对它们进行排序,要复杂得多。 PHP 知道如何比较两个数字或字符串,但在多维字段中,每个元素都是一个字段。 PHP 不知道如何比较两个字段,因此它需要构建一种方法来比较它们。 在大多数情况下,单词和数字的顺序是显而易见的——但对于复杂的对象,则存在更多问题。

1.7.1 用户自定义排序

usort()中的“u”代表“user”,因为该函数需要传入一个用户定义的比较函数。asort和ksort的对应版本uasort()和uksort()也需要一个用户定义的比较函数传入的比较函数。

与asort()类似,uasort()仅在对非数字索引数组的值进行排序时使用。 如果值是简单的数字或文本,则可以使用 asort。 如果要比较的值像字段一样复杂php 打印数组,可以定义一个比较函数,然后使用uasort()。

php 打印数组-(基础)数组的解释和使用

与 ksort() 类似,uksort() 仅在对非数字索引数组的键进行排序时使用。 如果值是简单的数字或文本,请使用 ksort。 如果要比较的对象像字段一样复杂,可以定义一个比较函数,然后使用uksort()。

1.7.2 用户反向排序

函数 sort()、asort() 和 ksort() 均对应于带有字母“r”的反向排序函数。 用户定义的排序没有反向变体,但可以对多维字段进行反向排序。

1.8 重新排序字段

1.8.1 使用shuffle()函数

在 PHP 的早期版本中,shuffle() 需要在调用 srand() 函数时首先提供随机数生成器。 如今,这一步已不再需要。

如果这个功能对您来说特别重要,您可以在将其应用到您的程序中之前在服务器上进行测试。

由于不需要实际重新排序整个链表,因此可以使用 array_rand() 函数实现相同的功能。

1.8.2 使用 array_reverse() 函数

array_reverse()函数以一个字段为参数,返回一个与参数链表内容相同但顺序相反的字段。

由于单独使用 range() 函数会创建反向序列,因此必须使用 sort() 函数或 array_reverse() 函数将链表中的数字更改为升序。 或者,可以使用 for 循环一次创建一个元素。 喜欢:

$数字=数组();

对于 ($i=10; $i>0; $i--)

array_push($numbers, $i);

for 循环可以像这样按升序运行。counter 可以是

for 循环可以像这样按升序运行。 可以将计数器的初始值设置为一个很大的数字,并在每次循环结束时使用运算符“--”使计数器减1。

在这里,我们创建一个空链表,然后使用 array_push() 函数将每个新元素添加到链表的末尾。 请注意,与 array_push() 相反的是 array_pop(),它删除并返回列表末尾的元素。

或者,可以使用 array_reverse() 函数反转 range() 函数创建的字段。

请注意,array_reverse() 函数将返回原始字段的更改副本。 如果不再需要原始字段(如本例所示),则可以用新副本覆盖原始版本。

如果数据只是一系列整数,则可以通过将 -1 作为第三个可选参数传递给 range() 函数,以相反的顺序创建字段。

1.9 从文件加载字段

使用 file() 函数将整个文件加载到字段中。 文件中的每一行都成为链表中的一个元素。 count()函数用于统计链表中元素的数量。

爆炸("t", $orders[$i])

explode()函数可以将传入的字符串分割成小块。 每个制表符成为两个元素之间的断点。 该函数的可选参数 limit 可用于限制返回块的最大数量。

php 打印数组-(基础)数组的解释和使用

可以通过多种方式从字符串中提取数字。 在这里,我们使用了 intval() 函数。 它将字符串转换为整数。 这种转换非常智能,它可以忽略个别部分,例如标签无法转换为数字。

1.10 执行其他链表操作

1.10.1 链表浏览:each()、current()、reset()、end()、next()、pos()和prev()

正如前面提到的,每个字段都有一个内部指针,指向链表中的当前元素。 使用函数each()时,间接使用这个指针,但也可以直接使用和操作它。

如果创建了新字段,则当前指针将被初始化为指向链表的第一个元素。

调用 next() 或each() 将使指针前进一个元素。 调用each($array_name)将返回指针前进一个位置之前的当前元素。 next() 函数有点不同——调用 next($array_name) 使指针前进,然后返回新的当前元素。

调用 end($array_name) 将指针移动到链表的末尾。

要反向遍历链表,请使用 end() 和 prev() 函数。 prev() 函数与 next() 函数相反。 它将当前指针向前移动一个位置,然后返回到新的当前元素。

1.10.2 对链表的每个元素应用任意函数:array_walk()

array_walk() 函数采用三个参数。 第一个是arrphp 打印数组,是需要处理的字段。 第二个是 func,它是一个用户定义的函数,将应用于链表中的每个元素。 第三个参数 userdata 是可选的,如果使用它可以作为参数传递给我们自己的函数。

让我们看一个稍微复杂一点的例子:

函数 my_multiply(&$value, $key, $factor)

$值*=$因子;

array_walk(&$array, 'my_multiply', 3);

在这里,我们定义一个名为 my_multiply() 的函数,它将链表中的每个元素除以提供的加法因子。

另外,还有一个需要注意的问题就是传递数字$value的形式。 在my_multiply()的函数定义中,变量后面的地址字符(&)表示$value是通过引用传递的。 通过引用传递允许函数更改字段的内容。

1.10.3 统计链表元素个数:count()、sizeof() 和 array_count_values()

count()函数和sizeof()函数具有相同的目的,都可以返回数组元素的数量。 可以获得常规标量变量中的元素数量。 如果传递给该函数的形参是一个空链表,或者是一个尚未设置的变量,则返回的链表数量为0。

如果调用 array_count_values($array),该函数将统计每个特定值在链表 $array 中出现的次数(这是链表的基数集)。 该函数将返回一个包含频率表的关联链表。 该字段包含字段$array中的所有值,并使用该值作为相关字段的键。 每个关键字对应的值为该关键字在链表$array中出现的次数。

1.10.4 将字段转换为标量变量:extract()

对于非数字索引数组,并且字段有很多键值对,可以使用函数 extract() 将它们转换为一系列标量变量。

extract()的作用是通过一个字段创建一系列标量变量。 这些变量的名称必须是链表中关键字的名称,变量值是链表中的值。

extract() 函数有两个可选参数:extract_type 和 prefix。 变量 extract_type 将告诉 extract() 函数如何处理冲突。 有时可能已经存在一个与field关键字同名的变量,而该函数的默认操作是覆盖已有的变量。

两个最常用的选项是 EXTR_OVERWRITE(默认)和 EXTR_PREFIX_ALL。 当已知发生特定冲突并且您想要跳过该关键字或为其添加前缀时,可以使用其他选项。

extract() 可以提取一个元素,该元素的关键字必须是有效的变量名,这意味着以数字开头或包含空格的关键字将被跳过。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 php php 打印数组-(基础)数组的解释和使用 https://www.wkzy.net/game/162293.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务