状态 草稿
Todo Fill ending methods - verify unshift_assoc example - review to_object method
官方最后更新时间 2009/01/27 04:14

数组辅助函数

Array 辅助函数用于转换数组。注意:为了方便使用,类名用 'arr' 替代 'array'。

方法

rotate()

'rotate' 旋转(顺时针转动)矩阵数字(2维空间),例如:把一个 2×3 数组转化成一个 3×2 数组.

2个参数:

  • [array] 想要转动的数组
  • [boolean] 是否在旋转数组保持相关的键 - 默认为TRUE

实例:

// 请注意使用 print() 只是为了显示
$optical_discs = array
			(
				'CD'  => array('700', '780'),
				'DVD' => array('4700','650'),
				'BD' => array('25000','405')
			);
print Kohana::debug($optical_discs);
$optical_discs = arr::rotate($optical_discs, FALSE);
print ('<br /><br />');
print Kohana::debug($optical_discs);

返回结果:

Array
(
    [CD] => Array
        (
            [0] => 700
            [1] => 780
        )
 
    [DVD] => Array
        (
            [0] => 4700
            [1] => 650
        )
 
    [BD] => Array
        (
            [0] => 25000
            [1] => 405
        )
 
)
 
 
Array
(
    [0] => Array
        (
            [CD] => 700
            [DVD] => 4700
            [BD] => 25000
        )
 
    [1] => Array
        (
            [CD] => 780
            [DVD] => 650
            [BD] => 405
        )
 
)

remove()

'remove' 从数组中移除键(值)并且返回。

2个参数:

  • [string] 想要的移除键(值)
  • [array] 移除键(值)的数组

实例:

// 请注意使用 print() 只是为了显示
$optical_discs = array
(
	'CD'  => array('700', '780'),
	'DVD' => array('4700','650'),
	'BD' => array('25000','405')
);
 
print Kohana::debug($optical_discs);
$cd = arr::remove('CD', $optical_discs);
print ('<br />');
print Kohana::debug($cd);
print ('<br />');
print Kohana::debug($optical_discs);

返回结果:

Array
(
    [CD] => Array
        (
            [0] => 700
            [1] => 780
        )
 
    [DVD] => Array
        (
            [0] => 4700
            [1] => 650
        )
 
    [BD] => Array
        (
            [0] => 25000
            [1] => 405
        )
 
)
 
 
Array
(
    [0] => 700
    [1] => 780
)
 
 
Array
(
    [DVD] => Array
        (
            [0] => 4700
            [1] => 650
        )
 
    [BD] => Array
        (
            [0] => 25000
            [1] => 405
        )
 
)

extract()

'extract' 从数值中抽取一个或多个键(值),如果所抽取的键(值)不在指定的数组里面则将在抽取数据里返回 NULL。

2个参数:

  • [array] 要抽取的数组
  • [string] 要抽取的键(值)

实例:

 $optical_discs = array
(
	'CD'  => array('700', '780'),
	'DVD' => array('4700','650'),
	'BD' => array('25000','405')
);
$optical_discs = arr::extract($optical_discs, 'DVD', 'Bluray');
echo Kohana::debug($optical_discs);

输出:

(array) Array
(
    [DVD] => Array
        (
            [0] => 4700
            [1] => 650
        )
 
    [Bluray] =>  //NULL
)

binary_search()

'binary_search' 对数组执行基本的二元搜索,默认下,返回在他在数组里所找到的键(值)。这里有四个参数:

  • [mixed] 想找到的键(值)
  • [array] 想从它里面搜索的排列数组
  • [boolean] 返回最接近的值,或者简单的返回 FALSE (默认)
  • [boolean] 搜索之前,是否对数组进行排列

实例:

$my_array = array('10', '20', '30', '50', '80');
echo arr::binary_search('50', $my_array);
// 3
 
echo arr::binary_search('45', $my_array);
// FALSE (not found)
 
echo arr::binary_search('45', $my_array, TRUE);
// 3
 
echo arr::binary_search('35', $my_array, TRUE);
// 2

range()

'range' 从一个数字开始计数,直到填满数组为止。

2个参数:

  • [integer] 步进
  • [integer] 终止数

实例:

echo Kohana::debug(arr::range(17, 150));

输出:

(array) Array
(
    [17] => 17
    [34] => 34
    [51] => 51
    [68] => 68
    [85] => 85
    [102] => 102
    [119] => 119
    [136] => 136
)

merge()

仿 array_merge_recursive,但增加数字键(值)和取代关联键(值)代替了添加的所有键(值):

  • [array] 任何数量的数组
  • 返回 [array] 的合并数组

实例:

echo Kohana::debug(arr::merge(array('a', 'b'), array('c', 'd'), array('e' => array('f', 'g'))));

返回结果:

(array) Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => d
    [e] => Array
        (
            [0] => f
            [1] => g
        )
 
)

overwrite()

'overwrite' 从输入的数组里重写数组的键(值),注意:不存在的键(值)将不被添加:

  • [array] 关键数组
  • [array] 输入数组,它将覆盖关键数组的值

实例:

$array1 = array('fruit1' => 'apple', 'fruit2' => 'mango', 'fruit3' => 'pineapple');
$array2 = array('fruit1' => 'strawberry', 'fruit4' => 'coconut'); 
print Kohana::debug(arr::overwrite($array1, $array2));

输出:

(array) Array
(
    [fruit1] => strawberry
    [fruit2] => mango
    [fruit3] => pineapple
)

map_recursive()

因为 php 没有这函数,所以才创建了 map_recursive($callback, array $array) 方法,并参考 array_walk_recursive 创建,但不是真实的递归:

  • [array] $callback 一个有效的回调,应用到数组的每一个成员。
  • [array] $array array to map to
  • 返回 [array] 的映射数组

实例 :

public function add($value){
    return $value + 1;
}
 
echo Kohana::debug(arr::map_recursive(array($this, 'add'), array('a' => 1, 'b' => 2, 'c' => array(3, 4), 'd' => array('e' => 5))));

返回结果:

(array) Array
(
    [a] => 2
    [b] => 3
    [c] => Array
        (
            [0] => 4
            [1] => 5
        )
 
    [d] => Array
        (
            [e] => 6
        )
)

unshift_assoc()

因为 php 没有这函数,所以才创建了 unshift_assoc,它只是在关联数组里释放一个关联:

  • [array] 被释放的数组
  • [string] 被释放的键
  • [mixed] 被释放的值

实例

$fruits = array('fruit1' => 'apple', 'fruit2' => 'mango', 'fruit3' => 'pineapple');
arr::unshift_assoc($fruits, 'fruit1', 'strawberry');
print Kohana::debug($fruits);

输出:

(array) Array
(
    [fruit1] => strawberry
    [fruit2] => mango
    [fruit3] => pineapple
)

to_object()

to_object(array $array, $class = 'stdClass') 转换数组为对象。此方法支持多维数组,其参数:

		
* **[array]** //$array// 需要转换的数组
* **[string]** //$class// 转换后的基类(默认为 'stdClass')

注意:对于一维数组使用:$object = (object) $array;

实例

$array = arr::to_object(array('test' => 13))
print $array ->test;
print Kohana::debug($array);

输出

13
(object) stdClass Object
(
    [test] => 13
)
helpers/arr.txt · 最后更改: 2009/02/03 00:03 由 icyleaf