|
|
<?php
|
|
|
|
|
|
class ArrayTool {
|
|
|
|
|
|
public static function buildToList($array, callable $callback) {
|
|
|
$retList = [];
|
|
|
foreach ($array as $key => $value) {
|
|
|
$retList[] = call_user_func($callback, $value);
|
|
|
}
|
|
|
return $retList;
|
|
|
}
|
|
|
|
|
|
public static function isList($array) {
|
|
|
if (!is_array($array)) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
if (empty($array)) {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
$expectedKey = 0;
|
|
|
foreach ($array as $i => $_) {
|
|
|
if ($i !== $expectedKey) {
|
|
|
return false;
|
|
|
}
|
|
|
$expectedKey++;
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
// 递归升序排序,array 如果是map,按ksort,如果是list,直接调用sort
|
|
|
public static function sortKeyValue($array) {
|
|
|
if (empty($array)) {
|
|
|
return $array;
|
|
|
}
|
|
|
|
|
|
if (self::isList($array)) {
|
|
|
sort($array);
|
|
|
} else {
|
|
|
ksort($array);
|
|
|
}
|
|
|
|
|
|
foreach ($array as $key => $value) {
|
|
|
if (is_array($value) && !empty($value)) {
|
|
|
$array[$key] = self::sortKeyValue($value);
|
|
|
}
|
|
|
}
|
|
|
return $array;
|
|
|
}
|
|
|
|
|
|
public static function listToOptions($list) {
|
|
|
$options = [];
|
|
|
foreach ($list as $item) {
|
|
|
$options[] = array(
|
|
|
'value' => $item,
|
|
|
'label' => $item,
|
|
|
);
|
|
|
}
|
|
|
|
|
|
return $options;
|
|
|
}
|
|
|
|
|
|
public static function mapToOption($map) {
|
|
|
$options = [];
|
|
|
foreach ($map as $key => $value) {
|
|
|
$options[] = array(
|
|
|
'value' => $key,
|
|
|
'label' => $value,
|
|
|
);
|
|
|
}
|
|
|
|
|
|
return $options;
|
|
|
}
|
|
|
|
|
|
public static function filterUniqueMerge(...$args) {
|
|
|
foreach ($args as $index => $arg) {
|
|
|
$args[$index] = is_array($arg) ? $arg : [];
|
|
|
}
|
|
|
|
|
|
return array_filter(array_unique(array_merge(...$args)));
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @param $dataList
|
|
|
* @param string ...$columns
|
|
|
* @return array
|
|
|
*/
|
|
|
public static function multiColumnValues($dataList, ...$columns) {
|
|
|
$columnIdxAndValuesMap = [];
|
|
|
foreach ($dataList as $data) {
|
|
|
$columnIdx = 0;
|
|
|
foreach ($columns as $field) {
|
|
|
$columnIdxAndValuesMap[$columnIdx][] = isset($data[$field]) ? $data[$field] : null;
|
|
|
$columnIdx++;
|
|
|
}
|
|
|
}
|
|
|
return $columnIdxAndValuesMap;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @param $dataList
|
|
|
* @param string ...$columns
|
|
|
* @return array
|
|
|
*/
|
|
|
public static function multiColumnFilterUniqueValues($dataList, ...$columns) {
|
|
|
$columnIdxAndValuesMap = self::multiColumnValues($dataList, ...$columns);
|
|
|
|
|
|
return array_map(function ($columnValues) {
|
|
|
return array_filter(array_unique($columnValues));
|
|
|
}, $columnIdxAndValuesMap);
|
|
|
}
|
|
|
|
|
|
public static function filterUnique($array) {
|
|
|
return array_filter(array_unique($array));
|
|
|
}
|
|
|
|
|
|
}
|