PHP最强大的功能大概就是处理数组了。PHP允许开发者创建由各种不同数据类型的键和值组成的数组,并允许你对它进行排序、分割和组合等多种操作。. [% g. ~& Z2 C i3 {) q+ `
力量越大,责任越大。找到最佳的办法来处理如此复杂的数组并不是一件轻松的事。本章一方面考察你对数组工作机制的认识——不光是理论上的,还要求实践。另一方面考察你“人工处理”简单脚本——指出哪里出错或者脚本将输出什么的能力。3 P* \ R9 ^. ~" c
8 K, h) Y" |% j9 L! {3 j3 ~8 _; p5 Q* I& Q
问题0 {$ ~0 Q# c8 d# X6 a( P/ o$ @ ?
+ S% a% q# K) v9 l' Q' W
1.索引数组的键是______,关联数组的键是______。 3 n3 A. |8 ^! J1 ?: z2 a* U- s G' |$ E5 K
A.浮点,字符串 4 q# y: D& a- I/ FB.正数,负数3 ?; B* m9 ^9 H/ L; C+ |3 C
C.偶数,字符串+ C/ c5 A. A# K0 ^
D.字符串,布尔值4 P1 ^) i/ W! ^% L7 _
E.整型,字符串) j5 t* ^4 E* D
. g) e- t# y; l- T' Z# v
% g3 h) F% B. O
2.考虑如下数组,怎样才能从数组$multi_array中找出值cat?
<?php
$multi_array = array("red",
"green",
42 => "blue",
"yellow" => array("apple",9 => "pear","banana",
"orange" => array("dog","cat","iguana")));
?>
复制代码
A.$multi_array['yellow']['apple'][0]/ Q+ I0 Z2 o" s* [0 H. c2 A
B.$multi_array['blue'][0]['orange'][1]" z5 z5 {! R) v- G; B4 x% \' n V
C.$multi_array[3][3][2] 1 `+ a5 W$ q. G' h6 X1 QD.$multi_array['yellow']['orange']['cat'] ! n! `6 L# h( l ?* s$ SE.$multi_array['yellow']['orange'][1] 8 ?0 Y2 |# `( b/ {1 Y. Y5 ^8 o. N 4 ^7 ~1 f8 V/ [9 c2 F% J ; [! Y6 p) r0 t) ~% m3 B2 ]3.运行以下脚本后,数组$array的内容是什么?
<?php
$array = array ('1', '1');
foreach ($array as $k => $v) {
$v = 2;
}
?>
复制代码
A.array ('2', '2')+ r% I ~% r w E6 l
B.array ('1', '1'). V0 [* u; w/ L; l
C.array (2, 2)- {2 [( b' d7 H7 |5 B
D.array (Null, Null) 9 I7 a" d( ?( [' k1 b; hE.array (1, 1)0 |' Z Q1 A8 u( A% e9 g- {
# Z: L- V' ]7 w4 F& ]7 r% ^- r+ a
4.对数组进行升序排序并保留索引关系,应该用哪个函数? 0 S. O/ E; ]: w& m( W' X2 ^' [4 p ' z0 y8 s2 x) t, J+ Z- KA.ksort(): w7 N' T+ Q7 f( D. f$ b. S1 A/ J8 d
B.asort() 7 n q+ L) C! a5 A2 LC.krsort() 2 K% ]5 b- P1 W( k5 k$ D4 \D.sort()' f+ O( k; J) P: l# h8 k F- p
E.usort()2 y2 U5 k3 N7 A1 B) i" Q1 y
! u. ]* ~# I- ?( j2 P1 U: A4 S4 d# Y. O3 K8 C" Q
5.哪个函数能把数组转化能字符串? & N0 E% ] B- X8 x1 i, E! _0 R6 e9 \% f- b5 V: g
答案:____________ # T9 D/ t+ G x: T: Y" x8 B4 V6 Z1 P0 g. u! `) d/ l
$ f& X0 v9 f& i: [2 U
6.以下脚本将按什么顺序输出数组$array内的元素?
<?php
$array = array ('a1', 'a3', 'a5', 'a10', 'a20');
natsort ($array);
var_dump ($array);
?>
复制代码
A.a1, a3, a5, a10, a20% X/ c* b0 l) I$ Y! E: h
B.a1, a20, a3, a5, a105 v* E" E3 d0 D5 h* P
C.a10, a1, a20, a3, a5$ }( W9 `: T$ u7 z3 l
D.a1, a10, a5, a20, a35 n( |9 Q7 X5 V7 w: l
E.a1, a10, a20, a3, a5+ C, F" u$ o' d
' ?% f* K6 e, \; B r- `$ J8 S 5 G p( D3 M5 S# V7 G- A7.哪个函数能把下方数组的内容倒序排列(即排列为:array('d', 'c', 'b', 'a'))?(双选)
<?php
$array = array ('a', 'b', 'c', 'd');
?>
复制代码
A.array_flip() : G! t9 Y3 O! i( A& u$ cB.array_reverse() , L& ?% u9 r. E! u. YC.sort() ) \$ G( ?; s ZD.rsort() , Q! M. J+ @+ _0 \" y! eE.以上都不对1 F ^4 a8 p. B3 s' s$ Q) [/ s
L" o' c! h) L8 j; E
3 K0 N: p. k4 _/ G. _
8.以下脚本输出什么?
/ z U4 `: o. @- s6 _$ d. c11.这题试图把你的注意力从真正的问题上转移开。true等同于数字1,因此$array数组将只包含一个元素。然而在var_dump()函数里出现了一个错误——$array被错拼成了$aray,少了一个“r”。因此var_dump将输出NULL(也可能是一个提示 ,这取决于你的设置)。答案是E。1 y: j6 y1 U, [ {1 @9 d# X% N
8 e* e/ w. ]4 [% C# K- E12.这题有些绕人。首先,注意两点:第一,你并非一定要使用这两种方式来传递数组。如果需要用一个函数来修改数组的内容,通过引用传递将是唯一的方法——但题中不是这种情况;第二,题目强调把数组传递个一个只读函数。如果不是这样,由于对数组进行改变将产生一个该数组的副本,答案会是B。然而常规情况下,PHP需要创建一套结构来维持一个引用,另一方面,由于PHP采用懒拷贝(lazy-copy)——又叫写时拷贝(copy-on-write)——机制,变量在被改变之前不会产生副本,所以通过引用将数组传递给一个不修改数组内容的函数比通过值传递要慢,而通过值传递是一种快速、安全的在函数间共用数组的方式。答案是E。 7 v) |% G9 }2 @" y2 M6 h" U( D- C6 c- K6 s
13.答案是E。sort函数不产生或返回数组副本,而是直接对传递给它的数组本体进行操作。该函数只返回布尔值true,代表排序成功(或者false,代表出错)。注意,这里将数组$a1引用传递给了sort_my_array(),我们不赞成这样做,应该在函数中重新声明引用。 ) z2 g$ L6 _) @4 ]9 K ) R! h2 [9 i D: z14.array_walk函数将一个指定函数应用在数组中的每个元素上。因此脚本glue函数将把数组中的所有元素连在一起,输出abcd。( u0 K3 A7 S3 N, w! s* \6 l