2014-02-16 4 views
2

У меня есть список массивов тегов из xml-файла и im, используя файл xml, чтобы добавить некоторые сообщения в wordpress. Поэтому мне нужно преобразовать массив xml в список, разделенный запятыми, для тегов для импорта в мои сообщения.XML-массив в список, разделенный запятой

Это пример XML-файл

<tags> 
    <tag>tag1</tag> 
    <tag>tag2</tag> 
    <tag>tag3</tag> 
</tags> 

Так что, когда я называю этот файл в моем файле .php и использовать print_r, чтобы получить выход я получаю это

SimpleXMLElement Object ( 
    [tag] => Array ( 
     [0] => SimpleXMLElement Object () 
     [1] => SimpleXMLElement Object () 
     [2] => SimpleXMLElement Object () 
     [3] => SimpleXMLElement Object () 
    ) 
) 

Итак 0 1 2 3 являются тегами и значениями, хранящимися в SimpleXMLElement Object(), я читал, что нормально не получать значения при использовании print_r, но я знаю, что значения есть.

Теперь мне нужно, чтобы преобразовать это в виде списка в конце, чтобы получить этот результат

$post_tags = tag1, tag2, tag3; 

так, что я могу использовать $ post_tags в моей функции.

+0

Ваш образец XML имеет только 3 '' узлы, но ваш объект SimpleXML имеет 4. Можете ли вы опубликовать код, используемый для получения 'SimplXMLElement' вы показали выше, через' print_r() '? –

+0

Это действительно важно, файлы xml будут импортированы из разных источников, поэтому в реальном мире ни один из импортированных файлов не будет иметь одинаковое количество тегов, а количество тегов не связано с той функцией, которая мне нужна. –

+0

Нет, я просто хочу проверить, что вы просите. –

ответ

1

Предполагая, что ваш объект (тот, на который вы вызвали print_r(), является $xml), вы должны были бы перебрать $xml->tag и добавить содержимое каждого дочернего объекта в массив. Наконец, вставьте массив в строку.

// An array to hold it temporarily 
$post_tags_arr = array(); 

foreach ($xml->tag as $t) { 
    // Cast it to a string to get the text value back 
    $post_tags_arr[] = (string)$t; 
} 
// Implode the array to a string 
$post_tags = implode(', ', $post_tags_arr); 
echo $post_tags; 

Вы указываете, что вам нужен список для $post_tags, но ваш синтаксис выше неоднозначен, чтобы хотел ли вы строку или массив. Если вам нужен массив, у вас его есть в $post_tags_arr до implode().

Если вы чувствуете себя умнее, а узлы <tag> проживают на одном уровне и не имеют детей, вы можете просто нарисовать их как обычный массив, что приведет к их строковым значениям.

// Cast it to an array in one go: 
$post_tags_arr = (array)$xml->tag; 
print_r($post_tags_arr); 

Array 
(
    [0] => tag1 
    [1] => tag2 
    [2] => tag3 
) 
+0

Я пробовал с действительно подобной функцией, как вы разместили выше, но я получал ошибку, как implode(): Недопустимые аргументы переданы плохой проверить еще раз и сравнить с вашими, чтобы увидеть, что я делаю неправильно. Что касается вашего вопроса, конечный результат должен быть выровнен по тегам и разделен запятой, поэтому я могу использовать его в WordPress wp_insert_post. это атрибут тегов для wp_insert_post, что мне нужно 'tags_input' => 'tag1, tag2, tag3' –

+0

Если это не работает точно так, как я его написал (кроме имени переменной '$ xml'), отправьте код выше, где вы создаете экземпляр SimpleXML для анализа вашего входного XML. –

+0

Это работает, мне не хватало глупых скобок, поэтому я использовал, как $ post_tags_arr вместо $ post_tags_arr [] внутри цикла foreach. Спасибо, что помогли мне понять, что я делаю неправильно. –

Смежные вопросы