多维数组-非法字符串偏移量

时间:2019-06-01 06:03:08

标签: php arrays multidimensional-array

我有一个数组,由于某种原因,该数组会不断消除错误“非法字符串偏移”,我尝试了几种方法来遍历它,但似乎没有任何作用。

$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'];
}

这也会输出相同的响应。

如果我使用上述循环回显key,它将返回适当的密钥(cookie,ip,direct,membership等)

我也尝试过:

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

这只是一个错误。

最后

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

只是一个错误。

4 个答案:

答案 0 :(得分:1)

您无需进行迭代,只需直接访问字段即可:

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

答案 1 :(得分:1)

原因: enddate索引(它是父数组的索引)的子数组的键,因此还使用date来获取子键值

解决方案:

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

答案 2 :(得分:1)

您不需要循环数组,因为您想要获取特定的键值:

第一种方法:

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

第二种方法:  这种方法有点难看。

echo array_column($fields,'end'))[0];

答案 3 :(得分:0)

您的数组应该看起来像这样以便遍历。 我已经在您的索引 on 值中添加了引号字符串(“”)。否则,您会得到警告:像这样的“使用未定义的常量打开”。希望这会有所帮助!。

     $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);
  }
}