N98\Util\ArrayFunctions::columnOrder PHP Method

columnOrder() public static method

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
return 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

 /**
  * @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;
 }