Многомерный массив - незаконное смещение строки - PullRequest
0 голосов
/ 01 июня 2019

У меня есть массив, который по какой-то причине продолжает выдавать ошибку "Illegal String Offset". Я пробовал несколько способов перебрать его, но ни один из них не работает.

$fields = Array (
[cookies] => Array (
    [timeout] => 0
    [votes_per_cookie] => 1
    [enabled] => on
    )
[ip] => Array (
    [timeout] => 0
    [filter] => 
    )
[direct] =>  Array ( )
[membership] => Array (
    [type] => Array ( )
    [once] =>  Array ( )
    )
[captcha] =>  Array ( )
[quota] => Array (
    [votes] => 1000
    )
[date] => Array (
    [start] => 1553846400
    [end] => 1554767940
    [enabled] => on
    )
[selection] => Array (
    [minimum] => 1
    [maximum] => 1
    )
[unique_id] => 1547834405
[results] => Array (
    [require_vote] => Array (
        [enabled] => on
        )
    )
);

Я пытаюсь получитьзначение end в массиве date.Я пробовал это:

foreach($fields as $field) {
  echo $field['end'];
}

это выводит данные, но также ошибка недопустимого смещения.

Я пробовал это:

foreach($fields as $key => $value) {
  echo $value['end'];
}

Это также выводит то же самоеreponse.

, если я повторю key, используя вышеуказанный цикл, он возвращает соответствующие ключи (куки, ip, direct, членство и т. д.)

Я также пытался:

foreach($fields['date'] as $field) {
    $field['end'];
  }

Это просто ошибка.

И, наконец,

foreach($fields as $field) {
  $field['date']['end'];
}

просто ошибка.

Ответы [ 4 ]

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

Вам не нужно зацикливать массив, так как вы хотите получить определенное значение ключа:

Первый метод:

echo $fields['date']['end'];

Второй метод: этот немного уродливый метод.

echo array_column($fields,'end'))[0];
1 голос
/ 01 июня 2019

Причина: end - это ключ дочернего массива индекса date (который является индексом родительского массива), поэтому вы также должны использовать date получить значение ключа ребенка

Решение:

echo $fields['date']['end'];
1 голос
/ 01 июня 2019

Вам не нужно повторять, просто получите доступ к полям напрямую:

echo $fields['date']['end'];
0 голосов
/ 01 июня 2019

Ваш массив должен выглядеть так, чтобы проходить через него. Я добавил кавычки ("") к вашим индексам и к вашему на значению. В противном случае вы получите предупреждение: например, «Использование неопределенной константы вкл.». Надеюсь, это поможет!

     $fields = array (
      'cookies' => array ('timeout' => 0,'votes_per_cookie' => 1,'enabled' => 'on'),
      'ip'=> array ('timeout' => 0,'filter' => '',),
      'direct' =>  array (),
      'membership' => array ('type' => array (),'once' =>  array ()),
      'captcha' =>  array (),
      'quota' => array ('votes' => 1000,),
      'date' => array ('start' => 1553846400,'end' => 1554767940,'enabled' => 'on',),
      'selection' => array ('minimum' => 1,'maximum' => 1,),
      'unique_id' => 1547834405,
      'results' => array ('require_vote' => array ('enabled' => 'on'))
    );

Теперь вы можете проходить через него правильно с foreach :

foreach($fields as $key => $value) {
  if($key == 'date'){
    print_r($value);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...