Код: Выделить всё
function foo(string $string) {
// convert $string to the multidimensional array element named
return $array_element;
}
$a = 'b[1]'; // STRING
echo foo($a);
// The value of $_POST['b'][1]
$c = 'b[1][2][3][4][5][6][7][8][9][apple]'; // STRING
echo foo($c);
// The value of $_POST['b'][1][2][3][4][5][6][7][8][9][apple]
Как преобразовать строковое представление переменной запроса, например $name = 'product[1]';, в $value = $_POST['product'][1];? Мне нужно было решение, которое могло бы поддерживать любую глубину. Представьте себе, что одна и та же функция поддерживает следующее:
Код: Выделить всё
function foo($name) {
$bits = explode('[',$name);
foreach ($bits as $id => $v) $bits[$id] = rtrim($v,']');
// magic happens below
return $_POST[$bits[0]][$bits[1]]...[$bits[x]];
}
Код: Выделить всё
// $_POST['product'][22] = 'armchair';
$name = 'product[22]';
$value = foo($name);
echo $value
// armchair
// Absurd example
// $_POST['product'][1][2][3][4][5][6][7][8] = 'extreme';
$name = 'product[1][2][3][4][5][6][7][8]';
$value = foo($name);
echo $value;
// extreme
Код: Выделить всё
function bar($name) {
$bits = explode('[',$name);
foreach ($bits as $id => $b) $bits[$id] = rtrim($b,']');
switch (count($bits)) {
case 2:
return $_POST[$bits[0]][$bits[1]];
case 3:
return $_POST[$bits[0]][$bits[1]][$bits[2]];
case 4:
return $_POST[$bits[0]][$bits[1]][$bits[2]][$bits[3]];
case 5:
return $_POST[$bits[0]][$bits[1]][$bits[2]][$bits[3]][$bits[4]];
case 6:
return $_POST[$bits[0]][$bits[1]][$bits[2]][$bits[3]][$bits[4]][$bits[5]];
default:
return $_POST[$name];
}
}
Подробнее здесь: https://stackoverflow.com/questions/788 ... uous-depth
Мобильная версия