php parse xml сделать результат в случайном порядке - PullRequest
1 голос
/ 29 июля 2011

test.xml

<?xml version="1.0" encoding="UTF-8"?>
<items>
<item>
  <id>1</id>
  <num>10</num>
  <text>text1</text>
</item>
<item>
  <id>2</id>
  <num>8</num>
  <text>text2</text>
</item>
<item>
  <id>3</id>
  <num>17</num>
  <text>text3</text>
</item>
<item>
  <id>4</id>
  <num>5</num>
  <text>text4</text>
</item>
<item>
  <id>5</id>
  <num>9</num>
  <text>text5</text>
</item>
</items>

Как это сделать, если <num> >=9, shuffle элементы и распечатать <text>?

$xml = simplexml_load_file('test.xml');
foreach ($xml->item as $key=>$data){
    if(($data->num)>=9){
        ... 
    }
}

нужно поставить как:

text1 text3 text5 ИЛИ text1 text5 text3 ИЛИ text3 text1 text5 ... // text1 text3 text5 не меньше 9, затем распечатать их и сделатьих положение ради

1 Ответ

3 голосов
/ 29 июля 2011

Когда они пройдут, добавьте их в (ассоциативный) массив.

После цикла foreach shuffle($array) перетасует их, а затем напечатает как обычно (echo $array[0].$array[1].$array[2]).

Это то, что вы искали?

РЕДАКТИРОВАТЬ:

$passedArray = array();

$xml = simplexml_load_file('test.xml');
foreach ($xml->item as $key=>$data){
    if(($data->num)>=9){
        $passedArray[] = $data->text;
    }
}

shuffle($passedArray);

А затем:

foreach ($passedArray as $value) {
    echo $value.' ';
}

Это оставит завершающий пробел.Это лучше:

$string = '';

foreach ($passedArray as $value) {
    $string += $value.' ';
}

echo substr($string, 0, strlen($string)-1);
...