N98\Util\ArrayFunctions::columnOrder PHP Метод

columnOrder() публичный статический Метод

non-existent columns default to numbered entries or if no numbered entries exists any longer, to null. entries in array that could not consume any column are put after the columns.
public static columnOrder ( array $columns, array $array ) : array
$columns array
$array array
Результат array
    public static function columnOrder(array $columns, array $array)
    {
        if (!$columns) {
            return $array;
        }
        $keys = array_fill_keys($columns, null);
        $keyed = array_intersect_key($array, $keys);
        $arrayLeftover = array_diff_key($array, $keyed);
        $keysLeftover = array_diff_key($keys, $keyed);
        $target = array();
        if ($keysLeftover) {
            foreach ($arrayLeftover as $key => $value) {
                if (is_string($key)) {
                    continue;
                }
                $target[key($keysLeftover)] = $value;
                unset($arrayLeftover[$key]);
                next($keysLeftover);
                if (null === key($keysLeftover)) {
                    break;
                }
            }
        }
        $result = array_merge($keys, $keyed, $keysLeftover, $target, $arrayLeftover);
        return $result;
    }

Usage Example

Пример #1
0
 /**
  * @param bool $ignoreDataUpdate
  * @param array $headers
  * @param int $errorCount
  * @return array
  */
 private function getModuleTable($ignoreDataUpdate, array $headers, &$errorCount)
 {
     $errorCount = 0;
     $table = array();
     foreach ($this->getMagentoModuleList() as $name => $module) {
         $row = $this->mapModuleToRow($name, $module, $ignoreDataUpdate, $errorCount);
         if ($ignoreDataUpdate) {
             unset($row['Data']);
         }
         $table[] = ArrayFunctions::columnOrder($headers, $row);
     }
     return $table;
 }