Заменить строку в массиве в массиве на усеченную строку - PullRequest
2 голосов
/ 07 декабря 2011

Я использую 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, кто-нибудь знает, почему и как это решить, или есть другой способ?

1 Ответ

1 голос
/ 07 декабря 2011

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

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

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