private static function _dump($obj, $message = null, $logLevel = LOG_DEBUG, $outputFile = null) { if (is_array($obj)) { $collection = array_reduce_val($obj, function ($startValue, $val, $key) { return $startValue || $val instanceof Lib_Model; }, false); if ($collection) { $message .= ' [collection]'; array_each($obj, function ($value, $key) use($message, $logLevel, $outputFile) { self::_dump($value, $message . "[{$key}]", $logLevel, $outputFile); }); return; } } if ($obj instanceof Lib_Model) { $message .= sprintf(' %s->toArray()', get_class($obj)); /* @var Lib_Model $obj */ $obj = $obj->toArray(); } $dump = var_export($obj, true); if (null != $outputFile) { fwrite($outputFile, $message . ': ' . $dump); } else { logger_log($message . ': ' . $dump, $logLevel); } }
/** * WARNING: Only columns copying supported. * @param Lib_Model_Db_Mysql $model * @param string|null $thisKeyCol may contain table prefix or not * @param string|null $thatKeyCol may contain table prefix or not * @param string $conditions * @return $this */ public function joinFrom($model, $thisKeyCol, $thatKeyCol = null, $conditions = '') { if ($thatKeyCol === null) { debug_assert($thisKeyCol !== null); $thatKeyCol = $model->getPrimaryKey(); } elseif ($thisKeyCol === null) { debug_assert($thatKeyCol !== null); $thisKeyCol = $this->getPrimaryKey(); } $this->prefixColumn($model, $thatKeyCol); $this->prefixColumn($this, $thisKeyCol); $conditions = str_replace('{that}', $model->getAlias(), $conditions); $conditions = str_replace('{this}', $this->getAlias(), $conditions); $this->mapPartWhere($this->addAliasToConditionDg()); $model->mapPartWhere($model->addAliasToConditionDg()); $thisFrom = $this->_select->getPart(Zend_Db_Select::FROM); $modelColumns = array_chain($model->_select->getPart(Zend_Db_Select::COLUMNS), array_group_dg(array_get_dg(return_dg(0))), array_map_val_dg(array_chain_dg(array_map_val_dg(function ($descriptor) { return null === $descriptor[2] ? $descriptor[1] : [$descriptor[2] => $descriptor[1]]; }), function ($columns) { $outArray = []; array_map_val($columns, function ($column) use(&$outArray) { if (is_array($column)) { array_map_val($column, function ($column, $alias) use(&$outArray) { $outArray[$alias] = $column; }); } else { $outArray[] = $column; } }); return $outArray; }))); array_each($model->_select->getPart(Zend_Db_Select::FROM), function ($descriptor, $alias) use($modelColumns, $thisFrom, $model, $thisKeyCol, $thatKeyCol, $conditions) { debug_enforce(!array_key_exists($alias, $thisFrom), "Alias `{$alias}` already used for table `{$descriptor['tableName']}`"); switch ($descriptor['joinType']) { case Zend_Db_Select::FROM: $this->_select->joinLeft([$model->getAlias() => $model->getTable()], "{$thisKeyCol}={$thatKeyCol} " . $conditions, array_key_exists($alias, $modelColumns) ? $modelColumns[$alias] : [], $descriptor['schema']); break; case Zend_Db_Select::INNER_JOIN: $this->_select->joinInner([$alias => $descriptor['tableName']], $descriptor['joinCondition'], array_key_exists($alias, $modelColumns) ? $modelColumns[$alias] : [], $descriptor['schema']); break; case Zend_Db_Select::LEFT_JOIN: $this->_select->joinLeft([$alias => $descriptor['tableName']], $descriptor['joinCondition'], array_key_exists($alias, $modelColumns) ? $modelColumns[$alias] : [], $descriptor['schema']); break; case Zend_Db_Select::RIGHT_JOIN: $this->_select->joinRight([$alias => $descriptor['tableName']], $descriptor['joinCondition'], array_key_exists($alias, $modelColumns) ? $modelColumns[$alias] : [], $descriptor['schema']); break; case Zend_Db_Select::FULL_JOIN: $this->_select->joinFull([$alias => $descriptor['tableName']], $descriptor['joinCondition'], array_key_exists($alias, $modelColumns) ? $modelColumns[$alias] : [], $descriptor['schema']); break; case Zend_Db_Select::CROSS_JOIN: $this->_select->joinCross([$alias => $descriptor['tableName']], $descriptor['joinCondition'], array_key_exists($alias, $modelColumns) ? $modelColumns[$alias] : [], $descriptor['schema']); break; case Zend_Db_Select::NATURAL_JOIN: $this->_select->joinNatural([$alias => $descriptor['tableName']], $descriptor['joinCondition'], array_key_exists($alias, $modelColumns) ? $modelColumns[$alias] : [], $descriptor['schema']); break; default: debug_assert(false, "Unknown join type " . var_dump_human_compact($descriptor['joinType'])); break; } }); $this->settingsJoin($model); return $this; }
function BenchmarkXarrayEach(Benchmark $b) { $arr = makeUserArray(ARRSIZE); $b->resetTimer(); for ($i = 0; $i < $b->N(); $i++) { array_each($arr, function ($k, $v) { return true; }); } }
/** * @param $callable * @return callable */ function array_each_dg($callable) { return function ($array) use($callable) { array_each($array, $callable); }; }
/** * @param callable $iterator */ public function each($iterator) { array_each($this->load(), $iterator); }
/** * @param object $object * @param callable $callable */ function object_each($object, $callable) { array_each((array) $object, function () use($callable) { call_user_func_array($callable, func_get_args()); }); }
/** * @param string|array $content * @param string $basename * @param string|finfo|null $mime * @todo http://tools.ietf.org/id/draft-ietf-http-range-retrieval-00.txt */ function http_response_file_download($content, $basename, $mime = null) { if (is_array($content)) { list($content, $length) = $content; } else { debug_enforce_type($content, 'string'); $length = strlen($content); } if (null === $mime && class_exists('finfo')) { $mime = new finfo(); } if (is_object($mime) && $mime instanceof finfo) { $mime = $mime->buffer($content, FILEINFO_MIME); } $headers = ['Pragma: public', 'Expires: -1', 'Cache-Control: public, must-revalidate, post-check=0, pre-check=0', "Content-Disposition: attachment; filename=\"{$basename}\"", "Content-Type: {$mime}", "Content-Length: {$length}"]; http_output_compression(false); array_each($headers, header_dg()); $download = function () use($content) { print $content; ob_flush(); flush(); }; call_safe(max_execution_time_set_dg(0), $download, max_execution_time_set_dg(tuple_get(0))); }