вставка запятой, разделенной на вывод - PullRequest
0 голосов
/ 02 марта 2012

Я изо всех сил пытаюсь вставить запятую, разделенную после каждого элемента, если более одного элемента.

У меня есть все значения, как и должно быть, пропущена только запятая.

$ result = $ html-> link ($ tags [$ cv], массив ('controller' => 'postTags', 'action' => 'view', $ post_tags [$ ck]), массив (' title '=>' Vis artikler под '. $ tags [$ cv],' escape '=> false)); echo $ result = substr ($ result, 0, -2);

Выводит правильные ссылки без запятой : test1test2test3, если несколько => должно быть; test1, test2, test3

Также, если только 1 элемент => вывод должен быть test1 (без запятой).

Итак, код как есть, выводит правильные ссылки, но без запятой! Я не уверен, как поступить, какие-либо предложения?

Попытка взрыва (полный код с использованием торта 1.3);

$ci = 0;
    $post_tags = explode(",", $content['Post']['tag_id']);
        if(!empty($post_tags)){
            foreach($post_tags as $ck => $cv) { 
                if(isset($tags[$cv])){
                    $ci = $ci+1;
                    $result = $html->link($tags[$cv], array('controller'=>'postTags','action' => 'view', $post_tags[$ck]), array('title'=>'Vis artikler under '.$tags[$cv],'escape' => false));
                    //pr($result);
                    $commaSeparated = implode(',',$result);
                    echo $commaSeparated;
                }
            }
        } else {
            echo '';
        }

Дайте мне ошибку ..; //

пр ($ post_tags);

Array
(
    [0] => 3
    [1] => 1
    [2] => 2
)

пр ($ тегов);

Array
(
    [1] => Tag1
    [2] => Tag2
    [3] => Tag3
    [4] => Tag4
)

Ответы [ 3 ]

2 голосов
/ 02 марта 2012

ОБНОВЛЕНИЕ

// get only the tags assigned to the post
$postTagKeys = array_flip($post_tags);
$tags = array_intersect_key($tags, $postTagKeys);

// ok lets make the links:
$tagLinks = array();

foreach($tags as $tagId => $tagName) {
   $tagLinks[] = $html->link(
       $tagName,
       array('controller'=>'postTags','action' => 'view', $tagId),
       array('title'=>'Vis artikler under '.$tagName,'escape' => false)

   );
}

//$tagLinks is now an array of html <a> tags linking to individual tags
// so to ouput the list we do

echo implode(', ', $tagLinks);

Если у вас есть категории в виде массива, просто используйте implode:

$cats = array('test1','test2','test3');
$cats2 = array('test1');

echo implode(', ',$cats);
echo implode(', ',$cats2);

Итак, используя ваш пример кода:

         foreach($post_tags as $ck => $cv) { 
            if(isset($tags[$cv])){
                $ci = $ci+1;
                $taglist = implode(', ', $tags[$cv]);
                $result = $html->link($taglist, array(
                  'controller'=>'postTags',
                  'action' => 'view', 
                  $post_tags[$ck]  // are you sure you want to pass the array here and not just the array key?
                ), array(
                  'title'=>'Vis artikler under '.$taglist,
                  'escape' => false)
                );

                echo $result;
            }
        }
1 голос
/ 02 марта 2012

Вы должны использовать implode () , который делает именно то, что вам нужно:

Объединять элементы массива со строкой

использовать это так же, как это:

$commaSeparated = implode(',', $array);
0 голосов
/ 04 марта 2012

Это то, что вы ищете:

$result = $html->link($tags[$cv] . ((count($tags) > 1 && $ci > 0 && count($tags) != $ci) ? ', ' : ''), array(
                              'controller' => 'postTags',
                              'action' => 'view',
                              $post_tags[$ck]
                          ), array(
                              'title' => 'Vis artikler under ' . $tags[$cv],
                              'escape' => false
                          )
                      );

Кстати, просто используйте $ci++; вместо $ci = $ci+1;.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...