Использовать PHP implode + array для возврата списка через запятую? - PullRequest
1 голос
/ 27 августа 2011

Я работаю над кодом WordPress с классом WP Alchemy и пытаюсь вызвать мета-значения, используемые в шаблоне страницы, в виде списка через запятую. Однако, когда мета-боксы WP Alchemy сохраняют значения в домене, они не сохраняются с разделителями или пробелами, так что это очень похоже на: onetwothreefourfive ...

Вот что у меня есть:

<?php $meta = get_post_meta(get_the_ID(), $custom_metabox->get_the_id(), TRUE); ?>
<li>Via: <?php foreach ($meta['g2m_via'] as $link) { ?><a href="<?php echo $link['g2m_via-link']; ?>">
<?php
$prefix = ', ';
$words = array();
$words[] = $link['g2m_via-title'];
$words = array_map("unserialize", array_unique(array_map("serialize", $words)));
for($i = 0; $i < count($words); $i++){ $fruitlist = implode(', ', $words); print_r($fruitlist); } 
?></a><?php } ?></li>

$ link ['g2m_via-title'] - это просто имя ссылки, которая хранится в метаполе, т.е. Link1 будет именем, google, com будет ссылкой (что здесь не важно, я это работает). Все остальные переменные есть. Переменная $ prefix ничего не делает, она должна была действовать как разделитель, например: $ val. = $ Prefix. '' $ link ['g2m_via-title']; , ''; однако это вызывает: Link1, Link 1, Link 2, Link 1, Link 2, Link 3.

Пока что с этим кодом, я получил самое близкое к тому, что я хочу:

Link1Link2Link3

Но это должно быть: Link1, Link2, Link3 и т. Д. Без запятой в заголовке последней ссылки.

Вывод var_dump ($ link):

array(2) { 
    ["g2m_via-title"]=> string(7) "JoyStiq" 
    ["g2m_via-link"]=> string(22) "joystiq.com"; 
}JoyStiq 
array(2) { 
    ["g2m_via-title"]=> string(9) "GrindGadget" 
    ["g2m_via-link"]=> string(16) "grindgadget.com"; 
} GrindGadget 
array(2) { 
    ["g2m_via-title"]=> string(13) "Engadget" 
    ["g2m_via-link"]=> string(13) "engadget.com"; 
} Engadget

Как я хочу, чтобы это выглядело так, что ["g2m_via-title"] перестанет дублировать:

array[1] { 
    ["g2m_via-title"]=> "JoyStiq" 
    ["g2m_via-link"]=> "joystiq.com"; 
}
array[2] { 
    ["g2m_via-title"]=> "GrindGadget" 
    ["g2m_via-link"]=> "grindgadget.com"; 
}
array[3] { 
    ["g2m_via-title"]=> "Engadget" 
    ["g2m_via-link"]=> "engadget.com"; 
}

3 других бессчетных кода, которые я пробовал: http://pastebin.com/wa0R8sDw.

1 Ответ

1 голос
/ 27 августа 2011

Предполагая эту структуру данных:

$links = array(
    array( 
        "g2m_via-title" => "JoyStiq",
        "g2m_via-link"  => "joystiq.com"
    ),
    array( 
        "g2m_via-title" => "GrindGadget",
        "g2m_via-link"  => "grindgadget.com"
    ),
    array( 
        "g2m_via-title" => "Engadget",
        "g2m_via-link"  => "engadget.com"
    )
);

Это подойдет:

$output = array();
foreach ($links as $link) {
    $output[] = sprintf('<a href="http://%s">%s</a>',
                        $link['g2m_via-link'],
                        htmlentities($link['g2m_via-title']));
}

echo join(', ', $output);

Так будет и в PHP 5.3 +:

echo join(', ', array_map(function ($link) {
    return sprintf('<a href="http://%s">%s</a>',
                   $link['g2m_via-link'],
                   htmlentities($link['g2m_via-title']));
}, $links));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...