我有这个循环:
$lines = array();
$line = 0;
$line_text = '';
$line_tot_len = 0;
$iTweetText = 0;
foreach ($tweet_text as &$text) {
$text_len = strlen($text); //space
if ($text_len <= 22 && ($line_tot_len + $text_len) <= 22) {
$line_text .= $text . ' ';
$line_tot_len = strlen($line_text);
$lines[$line] = $line_text;
} elseif ($text_len > 22) {
$line_text = '';
$line_tot_len = 0;
$line_text .= $text . ' ';
$line_tot_len = strlen($line_text);
$lines[$line + 1] = mb_substr($text, 0, 22) . '-';
$tweet_text[$iTweetText + 1] = mb_substr($text, 22, $text_len);
$line++;
}elseif ($line_tot_len + $text_len > 22) {
$line_text = '';
$line_tot_len = 0;
$line_text .= $text . ' ';
$line_tot_len = strlen($line_text);
$lines[$line + 1] = $line_text;
$line++;
}
$iTweetText++;
}
这里$tweet_text[$iTweetText + 1] = mb_substr($text, 22, $text_len);
我在数组中向我需要它的位置添加一个新的对键值(下一个循环)。
问题是,通过这种方式,我覆盖了该索引处的现有密钥,而不是我想添加1对并将所有后续的密钥递增1。
如何实现这一目标?
非常感谢你。
答案 0 :(得分:0)
由于我对评论的回答太长,我将其添加为答案:
但你覆盖了。这是你的问题。如果覆盖,你怎么不想覆盖? :)这是一个条件:
if ($text_len <= 22 && ($line_tot_len + $text_len) <= 22) {`
如果彼此之后的2行与此条件匹配,则首先将被第二行覆盖,因为在这种情况下,您不会使$line
失效。
另一种情况:
} elseif ($text_len > 22) {
在这里添加一个新密钥:
$lines[$line + 1] = mb_substr($text, 0, 22) . '-';
然后使用$line
删除$line++
。因此,如果您当前的$line
为7,那么您添加一个带有键8的行,将该行设置为8,因此如果第一个案例将成为hapen,它也将被覆盖。
<强>其他强>
在你的帖子中你说,
我正在添加一个新的对键值
不,您正在向数组添加简单值(字符串)。
答案 1 :(得分:0)
解决这个问题:
$lines = array();
$line = 0;
$line_text = '';
$line_tot_len = 0;
$iTweetText = 0;
foreach ($tweet_text as &$text) {
$text_len = strlen($text);
if ($text_len <= 22 && ($line_tot_len + $text_len) <= 22) {
$line_text .= $text . ' ';
$line_tot_len = strlen($line_text);
$lines[$line] = $line_text;
} elseif ($text_len > 22) {
$line_text = '';
$line_tot_len = 0;
$line_text .= $text . ' ';
$line_tot_len = strlen($line_text);
$lines[$line + 1] = mb_substr($text, 0, 22) . '-';
$tweet_text[$iTweetText + 1] = mb_substr($text, 22, $text_len) . ' ' . $tweet_text[$iTweetText + 1];
$line++;
}elseif ($line_tot_len + $text_len > 22) {
$line_text = '';
$line_tot_len = 0;
$line_text .= $text . ' ';
$line_tot_len = strlen($line_text);
$lines[$line + 1] = $line_text;
$line++;
}
$iTweetText++;
}
$last_line_height = 50;
foreach ($lines as $line) {
$last_line_height = $last_line_height + 50;
$image->draw()
->text($line, new Imagine\Imagick\Font(new \Imagick, $font_path, 39, $image->palette()->color($tweet_text_color)), new Imagine\Image\Point(70, $last_line_height));
}
$image->save($img_save_path);
break;