PHP доступ к определенной позиции многомерного массива по его ключам и установить его - PullRequest
2 голосов
/ 23 июня 2019

В PHP мы можем делать такие вещи:

Class Example {
 ...
}
$example = 'Example';
$object = new $example();

Или использовать переменные переменные:

$hour = 18;
$greets = array('Good morning','Good afternoon','Good evening');
$values = array(13,21,23);//people is sleeping at 23PM, so they don't greet.
$n = count($values);
$greet = 'greets';
for($i=0;$i<$n;$i++){
   if($hour < $values[$i]){
       echo 'hello, '.${$greet}[$i];
       break;
   }
}

И другие ..

Интересно,было бы возможно получить прямой доступ к определенному индексу многомерного массива аналогичным образом.Что-то вроде:

$array = array(...); //multidimensional array.
$position = '[0][4][3]';
print_r($array$position);

Заранее спасибо.


ОБНОВЛЕНИЕ

Мне очень жаль, потому что я неправильно закончил свой вопрос.

Мне нужно установить многомерный массив и добавить значение.т.е.:

$array$position = $data;

Ответы [ 3 ]

1 голос
/ 23 июня 2019

Вы можете реализовать это самостоятельно с помощью пользовательской функции:

function getValueFromMultiDimensionalArray( array $array, string $key )
{
    $keys = explode('][', $key);
    $value = $array;

    foreach ($keys as $theKey) {
        // remove the opening or closing bracket if present
        $theKey = str_replace([ '[', ']' ], '', $theKey);

        if (!isset($value[$theKey])) {
            return null;
        }

        $value = $value[$theKey];
    }

    return $value;
}
1 голос
/ 23 июня 2019

Вы можете определить путь как dot separated, проверьте следующее решение

function getValueByKey($a,$p){
  $c = $a; 
  foreach(explode('.',$p) as $v){
    if(!array_key_exists($v, $c)) return null;
    $c =  $c[$v];
  }
  return $c;
}

Вы можете использовать эту функцию как

$path = '1.2.3.0';
$indexValue = getValueByKey($array, $path);
0 голосов
/ 23 июня 2019

Нет, это невозможно.Единственное, что вы можете сделать, это реализовать интерфейс ArrayAccess, который позволяет обращаться к экземплярам с помощью оператора [].Но вам придется определить логику самостоятельно.

class MyClass implements ArrayAccess
{
...
}

$x = new MyClass([0=>[4=>[3=>'hello world']]]);
$position = '[0][4][3]';
echo $x[$position]; //hello world
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...