代码在循环外执行,而相同的代码在While循环内给出“未初始化的字符串偏移量”通知

时间:2017-07-18 作者:Fabian Amran

奇怪的是,当我在函数中运行下面的代码时,它会执行它,但当我在while循环中运行它时,它会给我以下提示:

注意:未初始化的字符串偏移量:4

function thing($content) {

preg_match_all("/(<h[^>]*>.*?<\\/h2>\\n*<p>.*?<\\/p>)/", $content, $array);

$i = 1;
$limit = count($array[0]);

$array = $array[0][4];
echo $array; //outside loop

while ( $i <= $limit) {
  $array = $array[0][4];
  echo $array; inside loop
  $i++;
}
return $content;
}
add_action(\'the_content\', \'thing\', 50);
为什么会这样?

我想一次访问一个数组键,这样做$array = $array[0][4]; 是必需的

1 个回复
SO网友:Chris Cox

该错误意味着您试图将字符串或null作为数组来寻址。也许它返回的匹配数少于5个,在这种情况下$array[0][4] 将被取消设置。

你的问题是:

function thing($content) {

preg_match_all("/(<h[^>]*>.*?<\\/h2>\\n*<p>.*?<\\/p>)/", $content, $array);

$i = 1;
$limit = count($array[0]);

$array = $array[0][4]; // you\'ve overwritten $array with what used to be $array[0][4]
echo $array; //outside loop

while ( $i <= $limit) {
  $array = $array[0][4]; // now you\'re trying to overwrite $array again once for every time you go around the loop
  echo $array; inside loop
  $i++;
}
return $content;
}
add_action(\'the_content\', \'thing\', 50);
让我们重写一下:

function thing($content) {

preg_match_all("/(<h[^>]*>.*?<\\/h2>\\n*<p>.*?<\\/p>)/", $content, $array);

$i = 1;
$limit = count($array[0]);

echo $array[0][4]; //outside loop

while ( $i <= $limit) {
  echo $array[0][4]; // inside loop
  $i++;
}
return $content;
}
add_action(\'the_content\', \'thing\', 50);
这仍然不是很好的代码,因为它假设数组是5个成员,并且每次循环时都重复相同的值。让我们将while循环重写为for:

for( $i = 0; $i < $limit; $i++ ) {
  echo $array[0][$i]; // inside loop
}

结束

相关推荐

Show the excerpt in a loop

我想用这个循环显示最后3篇文章。这很有效,但我不知道为什么,但摘录总是一样的。我做错了什么? <?php $args = array( \'numberposts\' => \'3\' ); $recent_posts = wp_get_recent_posts( $args ); foreach( $recent_posts as $recent ){ ?> <div class=\"