常用php陣列操作
阿新 • • 發佈:2018-11-28
/** * 陣列層級縮排轉換 * @param array $array 源陣列 * @param int $pid * @param int $level * @return array */ function Array2level($array, $pid = 0, $level = 1) { static $list = []; foreach ($array as $v) { if ($v['pid'] == $pid) { $v['level'] = $level; $list[] = $v; Array2level($array, $v['id'], $level + 1); } } return $list; }
/** * 把返回的資料集轉換成Tree * @access public * @param array $list 要轉換的資料集 * @param string $pid parent標記欄位 * @param string $level level標記欄位 * @return array */ function list_to_tree($list, $pk='id', $pid = 'pid', $child = 'son', $root = 0, $is_count = false) { // 建立Tree $tree = []; if(is_array($list)) { // 建立基於主鍵的陣列引用 $refer = []; foreach ($list as $key => $data) { $refer[$data[$pk]] =& $list[$key]; } foreach ($list as $key => $data) { // 判斷是否存在parent $parentId = $data[$pid]; if ($root == $parentId) { $tree[] =& $list[$key]; }else{ if (isset($refer[$parentId])) { $parent =& $refer[$parentId]; $parent[$child][] =& $list[$key]; if($is_count==true) $parent['_count'] = count($parent[$child]); } } } } return $tree; }
/** * 將資料格式化成樹形結構 * @param array $items * @return array */ function genTree($items,$pk='id',$pid = 'pid', $child = '_child') { $tree = []; //格式化好的樹 foreach ($items as $item) if (isset($items[$item[$pid]])) $items[$item[$pid]][$child][] = &$items[$item[$pk]]; else $tree[] = &$items[$item[$pk]]; return $tree; }
/**
* 多個數組的笛卡爾積
*
* @param unknown_type $data
*/
function combineDika() {
$data = func_get_args();
$data = current($data);
$cnt = count($data);
$result = array();
$arr1 = array_shift($data);
foreach($arr1 as $key=>$item)
{
$result[] = array($item);
}
foreach($data as $key=>$item)
{
$result = combineArray($result,$item);
}
return $result;
}
/**
* 兩個陣列的笛卡爾積
* @param array $arr1 [description]
* @param array $arr2 [description]
* @return [type] [description]
* @date 2017-08-07
* @author 趙俊峰 <[email protected]>
*/
function combineArray($arr1 =[],$arr2=[]) {
$result = [];
foreach ($arr1 as $item1)
{
foreach ($arr2 as $item2)
{
$temp = $item1;
$temp[] = $item2;
$result[] = $temp;
}
}
return $result;
}
/**
* 將二維陣列以元素的某個值作為鍵 並歸類陣列
* array( array('name'=>'aa','type'=>'pay'), array('name'=>'cc','type'=>'pay') )
* array('pay'=>array( array('name'=>'aa','type'=>'pay') , array('name'=>'cc','type'=>'pay') ))
* @param $arr 陣列
* @param $key 分組值的key
* @return array
*/
function group_same_key($arr,$key){
$new_arr = array();
foreach($arr as $k=>$v ){
$new_arr[$v[$key]][] = $v;
}
return $new_arr;
}
/**
* @param $arr
* @param $key_name
* @return array
* 將資料庫中查出的列表以指定的 id 作為陣列的鍵名
*/
function convert_arr_key($arr, $key_name='id')
{
$arr2 = [];
foreach($arr as $key => $val){
$arr2[$val[$key_name]] = $val;
}
return $arr2;
}
/**
* 陣列 轉 物件
*
* @param array $arr 陣列
* @return object
*/
function array_to_object($arr) {
if (gettype($arr) != 'array') {
return;
}
foreach ($arr as $k => $v) {
if (gettype($v) == 'array' || getType($v) == 'object') {
$arr[$k] = (object)array_to_object($v);
}
}
return (object)$arr;
}
/**
* 物件 轉 陣列
* @param object $obj 物件
* @return array
*/
function object_to_array($obj) {
$obj = (array)$obj;
foreach ($obj as $k => $v) {
if (gettype($v) == 'resource') {
return;
}
if (gettype($v) == 'object' || gettype($v) == 'array') {
$obj[$k] = (array)object_to_array($v);
}
}
return $obj;
}
//將 xml資料轉換為陣列格式。
function xml_to_array($xml){
$reg = "/<(\w+)[^>]*>([\\x00-\\xFF]*)<\\/\\1>/";
if(preg_match_all($reg, $xml, $matches)){
$count = count($matches[0]);
for($i = 0; $i < $count; $i++){
$subxml= $matches[2][$i];
$key = $matches[1][$i];
if(preg_match( $reg, $subxml )){
$arr[$key] = xml_to_array( $subxml );
}else{
$arr[$key] = $subxml;
}
}
}
return $arr;
}
/**
* array_delete 刪除陣列中的某個值
* @param $array
* @param $value
* @return mixed
*/
function array_delete($array, $value)
{
$key = array_search($value, $array);
if ($key !== false)
array_splice($array, $key, 1);
return $array;
}
// 分析列舉型別配置值 格式 a:名稱1,b:名稱2
function parse_config_attr($value, $type = null) {
switch ($type) {
default: //解析"1:1\r\n2:3"格式字串為陣列
$array = preg_split('/[,;\r\n]+/', trim($value, ",;\r\n"));
if (strpos($value,':')) {
$value = array();
foreach ($array as $val) {
list($k, $v) = explode(':', $val);
$value[$k] = $v;
}
} else {
$value = $array;
}
break;
}
return $value;
}
//array_column()函式相容低版本PHP
if (!function_exists('array_column')) {
function array_column($input, $columnKey, $indexKey = null) {
$columnKeyIsNumber = (is_numeric($columnKey)) ? true : false;
$indexKeyIsNull = (is_null($indexKey)) ? true : false;
$indexKeyIsNumber = (is_numeric($indexKey)) ? true : false;
$result = array();
foreach ((array) $input as $key => $row) {
if ($columnKeyIsNumber) {
$tmp = array_slice($row, $columnKey, 1);
$tmp = (is_array($tmp) && !empty($tmp)) ? current($tmp) : null;
} else {
$tmp = isset($row[$columnKey]) ? $row[$columnKey] : null;
}
if (!$indexKeyIsNull) {
if ($indexKeyIsNumber) {
$key = array_slice($row, $indexKey, 1);
$key = (is_array($key) && !empty($key)) ? current($key) : null;
$key = is_null($key) ? 0 : $key;
} else {
$key = isset($row[$indexKey]) ? $row[$indexKey] : 0;
}
}
$result[$key] = $tmp;
}
return $result;
}
}