函数代码
常用数组处理:ArrHelper
<?php
namespace App\Test;
class ArrHelper
{
public static function only($array, $keys)
{
if (isset($array[0]) && is_array($array[0])) {
$arr = [];
foreach ($array as $key => $val) {
$arr[] = array_intersect_key($val, array_flip((array)$keys));
}
} else {
$arr = array_intersect_key($array, array_flip((array)$keys));
}
return $arr;
}
public static function except($array, $keys)
{
if (isset($array[0]) && is_array($array[0])) {
$arr = [];
foreach ($array as $key => $val) {
$arr[] = array_diff_key($val, array_flip((array)$keys));
}
} else {
$arr = array_diff_key($array, array_flip((array)$keys));
}
return $arr;
}
public static function first($array)
{
reset($array);
return current($array);
}
public static function end($array)
{
$end = end($array);
reset($array);
return $end;
}
public static function isList($array)
{
$keys = array_keys($array);
return $keys === array_keys($keys);
}
public static function sort($array, $field, $asc = 1)
{
usort($array, function ($a, $b) use ($field, $asc) {
return $asc ? $a[$field] <=> $b[$field] : $b[$field] <=> $a[$field];
});
return $array;
}
public static function where($array, $where, $strict = true)
{
$arr = [];
foreach ($array as $key => $value) {
$flag = true;
foreach ($where as $field => $val) {
if ($strict) {
if ($value[$field] !== $val) {
$flag = false;
break;
}
} else {
if ($value[$field] <> $val) {
$flag = false;
break;
}
}
}
if ($flag) {
$arr[] = $value;
}
}
return $arr;
}
public static function count($array, $where, $strict = true)
{
return count(self::where($array, $where, $strict));
}
public static function groupCount($array, $field, $format = false)
{
$groupArr = array_values(array_unique(array_column($array, $field)));
$arr = [];
foreach ($array as $key => $value) {
foreach ($groupArr as $v) {
if ($value[$field] === $v) {
isset($arr[$v]) ? $arr[$v]++ : ($arr[$v] = 1);
break;
}
}
}
if ($format) {
$tmpArr = [];
foreach ($arr as $key => $val) {
$tmpArr[] = [
'id' => $key,
'count' => $val,
'field' => $field,
];
}
$arr = $tmpArr;
}
return $arr;
}
public static function groupBy($array, $field)
{
$groupArr = array_values(array_unique(array_column($array, $field)));
$arr = [];
foreach ($array as $key => $value) {
foreach ($groupArr as $v) {
if ($value[$field] === $v) {
isset($arr[$v]) ? array_push($arr[$v], $value) : ($arr[$v][] = $value);
break;
}
}
}
return $arr;
}
public static function getArrDot(&$arr, $keyName)
{
$keys = explode('.', $keyName);
foreach ($keys as $key) {
if (!is_array($arr) || !array_key_exists($key, $arr)) {
return null;
}
$arr = &$arr[$key];
}
return $arr;
}
}