You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
pdd-order-api/app/libs/tool/class.ArrayTool.php

119 lines
2.9 KiB
PHP

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?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));
}
}