PHP在循环期间在数组中添加对而不覆盖现有密钥

时间:2014-11-07 11:34:13

标签: php arrays loops

我有这个循环:

    $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。

如何实现这一目标?

非常感谢你。

2 个答案:

答案 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;
相关问题