Замените строку в массиве в массиве усеченной строкой


Я использую CodeIgniter для своего веб-сайта. Я также использую API tumblr на своем сайте, чтобы показывать опубликованные новости.

Поскольку показывать весь текст немного чересчур, я хочу сократить основную копию до 150 символов, я делаю это с помощью функции character_limiter CI.

Код в моем "домашнем" контроллере выглядит следующим образом:

public function index() {       
    //Title for home page   
    $data['title'] = "Home - Welcome";

    // Obtain an array of posts from the specified blog
    // See the config file for a list of settings available
    $tumblr_posts = $this->tumblr->read_posts();

    foreach($tumblr_posts as $tumblr_post) {
        $tumblr_post['body'] = character_limiter($tumblr_post['body'], 150);
    }

    // Output the posts 
    $data['tumblr_posts'] = $tumblr_posts;      

    // Load the template from the views directory
    $this->layout->view('home', $data);
}   

Проблема в том, что $tumblr_post['body'] не сокращается, когда я повторяю его на своей странице просмотра. Выполнение этого, как описано выше, работает в Asp.net (C#) но, похоже, это не работает в php кто-нибудь знает, почему и как это решить, или есть другой способ?

Author: Rocket Hazmat, 2011-12-07

1 answers

Ваша проблема связана с циклом foreach. Вам нужно добавить & перед $tumblr_post, чтобы передать его по ссылке. Это гарантирует, что вы действительно редактируете значения в массиве. Без & вы просто редактируете локальную переменную, а не массив.

Попробуйте сделать это так (обратите внимание на &):

foreach($tumblr_posts as &$tumblr_post) {
    $tumblr_post['body'] = character_limiter($tumblr_post['body'], 150);
}
 1
Author: Rocket Hazmat, 2011-12-07 19:29:41