php 打印数组到日志_PHP: array_column - Manual

这篇博客介绍了一个PHP自定义函数`array_column_recursive`,用于递归地从多维数组中提取指定列的值。该函数接受三个参数:输入数组、要提取的列的键和可选的用作索引的列键。当标准的`array_column`函数不能满足处理多维数组需求时,此函数提供了解决方案。
摘要由CSDN通过智能技术生成

This didn't work for me recursively and needed to come up with a solution.

Here's my solution to the function:

if ( ! function_exists( 'array_column_recursive' ) ) {

/**

* Returns the values recursively from columns of the input array, identified by

* the $columnKey.

*

* Optionally, you may provide an $indexKey to index the values in the returned

* array by the values from the $indexKey column in the input array.

*

* @param array $input     A multi-dimensional array (record set) from which to pull

*                         a column of values.

* @param mixed $columnKey The column of values to return. This value may be the

*                         integer key of the column you wish to retrieve, or it

*                         may be the string key name for an associative array.

* @param mixed $indexKey  (Optional.) The column to use as the index/keys for

*                         the returned array. This value may be the integer key

*                         of the column, or it may be the string key name.

*

* @return array

*/

function array_column_recursive( $input = NULL, $columnKey = NULL, $indexKey = NULL ) {

// Using func_get_args() in order to check for proper number of

// parameters and trigger errors exactly as the built-in array_column()

// does in PHP 5.5.

$argc   = func_num_args();

$params = func_get_args();

if ( $argc < 2 ) {

trigger_error( "array_column_recursive() expects at least 2 parameters, {$argc} given", E_USER_WARNING );

return NULL;

}

if ( ! is_array( $params[ 0 ] ) ) {

// Because we call back to this function, check if call was made by self to

// prevent debug/error output for recursiveness :)

$callers = debug_backtrace();

if ( $callers[ 1 ][ 'function' ] != 'array_column_recursive' ){

trigger_error( 'array_column_recursive() expects parameter 1 to be array, ' . gettype( $params[ 0 ] ) . ' given', E_USER_WARNING );

}

return NULL;

}

if ( ! is_int( $params[ 1 ] )

&& ! is_float( $params[ 1 ] )

&& ! is_string( $params[ 1 ] )

&& $params[ 1 ] !== NULL

&& ! ( is_object( $params[ 1 ] ) && method_exists( $params[ 1 ], '__toString' ) )

) {

trigger_error( 'array_column_recursive(): The column key should be either a string or an integer', E_USER_WARNING );

return FALSE;

}

if ( isset( $params[ 2 ] )

&& ! is_int( $params[ 2 ] )

&& ! is_float( $params[ 2 ] )

&& ! is_string( $params[ 2 ] )

&& ! ( is_object( $params[ 2 ] ) && method_exists( $params[ 2 ], '__toString' ) )

) {

trigger_error( 'array_column_recursive(): The index key should be either a string or an integer', E_USER_WARNING );

return FALSE;

}

$paramsInput     = $params[ 0 ];

$paramsColumnKey = ( $params[ 1 ] !== NULL ) ? (string) $params[ 1 ] : NULL;

$paramsIndexKey  = NULL;

if ( isset( $params[ 2 ] ) ) {

if ( is_float( $params[ 2 ] ) || is_int( $params[ 2 ] ) ) {

$paramsIndexKey = (int) $params[ 2 ];

} else {

$paramsIndexKey = (string) $params[ 2 ];

}

}

$resultArray = array();

foreach ( $paramsInput as $row ) {

$key    = $value = NULL;

$keySet = $valueSet = FALSE;

if ( $paramsIndexKey !== NULL && array_key_exists( $paramsIndexKey, $row ) ) {

$keySet = TRUE;

$key    = (string) $row[ $paramsIndexKey ];

}

if ( $paramsColumnKey === NULL ) {

$valueSet = TRUE;

$value    = $row;

} elseif ( is_array( $row ) && array_key_exists( $paramsColumnKey, $row ) ) {

$valueSet = TRUE;

$value    = $row[ $paramsColumnKey ];

}

$possibleValue = array_column_recursive( $row, $paramsColumnKey, $paramsIndexKey );

if ( $possibleValue ) {

$resultArray = array_merge( $possibleValue, $resultArray );

}

if ( $valueSet ) {

if ( $keySet ) {

$resultArray[ $key ] = $value;

} else {

$resultArray[ ] = $value;

}

}

}

return $resultArray;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值