Можно ли в PHP подставить адрес массиву?
Например вот структура $_FILE
, что бы получить имя и размер файлов в портфолио массив будет выглядеть так:
$_FILE['name'][7]['portfolio'][0];
$_FILE['size'][7]['portfolio'][0];
Могу ли я каким нибудь образом поместить адрес [7]['portfolio'][0]
в переменную и сделать, как то так?
$a = [7]['portfolio'][0];
$_FILE['name'].$a;
// P.S. Понимаю что это работать не будет, можно и что то подобное сделать?
-
[name] => Array(
[6] => Array(
[layer] => Снимок экрана (10).png
[size] => whois_2.png
)
[7] => Array(
[portfolio] => Array(
[0] => 2whois.png
[1] => DNS.png
)
)
)
...
[size] => Array(
[6] => Array(
[layer] => Снимок экрана (10).png
[size] => whois_2.png
)
[7] => Array(
[portfolio] => Array(
[0] => 2whois.png
[1] => DNS.png
)
)
)
Обновлено: позволяет определять не все ключи.
Можно воспользоваться для вашей задачи замыканием (Closure). Вот вариант:
<?php
function fixOffsets($k1, $k2 = null, $k3 = null)
{
return function (array $arr) use ($k1, $k2, $k3) {
$res = $arr[$k1] ;
if ($k2 === null) return $res;
$res = $res[$k2] ;
if ($k3 === null) return $res;
return $res[$k3];
};
};
$a = [
'name' => [
6 => [
'layer' => "Снимок экрана (10).png",
'size' => "3whois_2.png"
],
7 => [
'portfolio' => [
0 => "whois.png",
1 => "DNS.png"
]
]
],
'size' => [
6 => [
'layer' => "Снимок экрана (10).png",
'size' => "4whois_2.png"
],
7 => [
'portfolio' => [
0 => "2whois.png",
1 => "2DNS.png"
]
]
]
];
$extractor = fixOffsets(7, 'portfolio', 0);
var_dump($extractor($a['name']));
var_dump($extractor($a['size']));
$extractor = fixOffsets(6, 'size' );
var_dump($extractor($a['name']));
var_dump($extractor($a['size']));
Описание:
Вызов функции fixOffsets($k1, $k2, $k3)
возвращает функцию-замыкание,у которой в области видимости зафиксированны переменные $k1, $k2, $k3 и которая:
ожидает параметр - многомерный ассоциативный массив;
возвращает требуемое значение из массива, переданного в качестве аргумента, используя переменные $k1, $k2, $k3 как ключи. Два последних ключа являются необязательными.
Песочница
Доработанный ответ
Можно воспользоваться для вашей задачи замыканием (Closure). Вот вариант:
<?php
function fixOffsets(array $path)
{
return function (array $arr) use ($path) {
foreach($path as $val)
if(empty($val)) return $arr;
else $arr = $arr[$val];
return $arr;
};
};
$a = [
'name' => [
6 => [
'layer' => "Снимок экрана (10).png",
'size' => "whois_2.png"
],
7 => [
'portfolio' => [
0 => "2whois.png",
1 => "DNS.png"
]
]
],
'size' => [
6 => [
'layer' => "Снимок экрана (10).png",
'size' => "whois_2.png"
],
7 => [
'portfolio' => [
0 => "2whois.png",
1 => "2DNS.png"
]
]
]
];
//var_dump($a['name'][7]['portfolio'][0]);
//var_dump($a['size'][7]['portfolio'][0]);
$extractor = fixOffsets(array(7, 'portfolio', 0));
var_dump($extractor($a['name']));
var_dump($extractor($a['size']));
$extractor = fixOffsets(array(6, 'layer'));
var_dump($extractor($a['name']));
var_dump($extractor($a['size']));
А какие еще варианты решения данной задачи могут быть?
Виртуальный выделенный сервер (VDS) становится отличным выбором
Следуя по примерам из учебника в документации я переписал routesphp соответствующим образом:
Есть форма с двумя инпутами - исходное значение и заменяемое, форма отправляет GET в файл replacephp