Вы можете попробовать ниже -
select Date1, Date2, Date3, details as OtherDetails from details
where Date1 <= 'asAtDate' and
(
(Date3 > DATEADD(DD,1,'asAtDate') or Date3 is null) and
(Date2 > DATEADD(DD,1,'asAtDate') or Date2 is null)
)
With 2 loops.
function flipDiagonally($arr) {
$out = array();
foreach ($arr as $key => $subarr) {
foreach ($subarr as $subkey => $subvalue) {
$out[$subkey][$key] = $subvalue;
}
}
return $out;
}
I think you're referring to the array transpose (columns become rows, rows become columns).
Here is a function that does it for you (source):
function array_transpose($array, $selectKey = false) {
if (!is_array($array)) return false;
$return = array();
foreach($array as $key => $value) {
if (!is_array($value)) return $array;
if ($selectKey) {
if (isset($value[$selectKey])) $return[] = $value[$selectKey];
} else {
foreach ($value as $key2 => $value2) {
$return[$key2][$key] = $value2;
}
}
}
return $return;
}
Транспонирование N-мерного массива:
function transpose($array, &$out, $indices = array())
{
if (is_array($array))
{
foreach ($array as $key => $val)
{
//push onto the stack of indices
$temp = $indices;
$temp[] = $key;
transpose($val, $out, $temp);
}
}
else
{
//go through the stack in reverse - make the new array
$ref = &$out;
foreach (array_reverse($indices) as $idx)
$ref = &$ref[$idx];
$ref = $array;
}
}
$foo[1][2][3][3][3] = 'a';
$foo[4][5][6][5][5] = 'b';
$out = array();
transpose($foo, $out);
echo $out[3][3][3][2][1] . ' ' . $out[5][5][6][5][4];
Действительно хакерское и, вероятно, не лучшее решение, но эй, оно работает.
По сути, оно рекурсивно перебирает массив, накапливая текущие значения в массив.
Как только он достигает ссылочного значения, он берет «стек» индексов и переворачивает его, помещая в массив $ out. (Есть ли способ избежать использования массива $ temp?)
function transpose($array) {
array_unshift($array, null);
return call_user_func_array('array_map', $array);
}
Или, если вы используете PHP 5.6 или более позднюю версию:
function transpose($array) {
return array_map(null, ...$array);
}