PHP Как смешать два случайных данных FOREACH? - PullRequest
0 голосов
/ 31 мая 2011

Я попробовал этот метод, но он вызвал Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 42 bytes) in E:\www\json_example\4.php on line 170 строку в foreach foreach($data_b as $b) $arr[] =.

Итак, в дополнение к этому методу, есть ли простой способ смешать два случайных данных FOREACH? меньше стоит памяти. (Не обязательно сортировать по названию) Спасибо.

foreach($data_a as $a){
 //$a['title'];
 //$a['content'];
 $arr[] = array('title' => html_entity_decode($a['title'], ENT_QUOTES, 'UTF-8'),'content' => html_entity_decode($a['content'], ENT_QUOTES, 'UTF-8'));
}

foreach($data_b as $b){
 //$b['title'];
 //$b['content'];
 $arr[] = array('title' => html_entity_decode($b['title'], ENT_QUOTES, 'UTF-8'),'content' => html_entity_decode($b['content'], ENT_QUOTES, 'UTF-8'));
}

function cmp($aa, $bb)
{
    $t1 = $aa['title'];
    $t2 = $bb['title'];
    if ($t1 == $t2) return 0;
    return $t1 < $t2 ? -1 : 1;
}
usort($arr, 'cmp');

foreach ($arr as $item){
  echo $item['title'];
  echo $item['content'];
}

Ответы [ 3 ]

3 голосов
/ 31 мая 2011

Итак, в дополнение к этому методу, есть ли простой способ смешать два случайных данных FOREACH? меньше стоит памяти. (Не обязательно сортировка по названию)

По-видимому, у вас огромный набор данных, поскольку вы достигаете предела в 134217728 байт (что составляет ~ 134 МБ). Главный вопрос: откуда вы получаете эти данные? Это из двух разных источников данных или из одного источника (например, из базы данных)? По моему опыту, люди склонны решать подобные проблемы в PHP, хотя это легко можно решить с помощью SELECT ... UNION SELECT ... ORDER BY RANDOM ();

1 голос
/ 31 мая 2011

Попробуйте освободить память, как только она вам больше не понадобится:

function _h_dec($val) {
    return html_entity_decode($val, ENT_QUOTES, 'UTF-8');
}
foreach ($data_a as $key => $a) {
    $arr[] = array('title' => _h_dec($a['title']), 'content' => _h_dec($a['content']));
    unset($data_a[$key]);
}
unset($data_a);

foreach ($data_b as $key => $b) {
    $arr[] = array('title' => _h_dec($b['title']), 'content' => _h_dec($b['content']));
    unset($data_b[$key]);
}
unset($data_b);

function cmp($aa, $bb) {
    $t1 = $aa['title'];
    $t2 = $bb['title'];
    if ($t1 == $t2)
        return 0;
    return $t1 < $t2 ? -1 : 1;
}

usort($arr, 'cmp');

foreach ($arr as $item) {
    echo $item['title'];
    echo $item['content'];
}
1 голос
/ 31 мая 2011

привет, вы пробовали это: Php's shuffle. http://php.net/manual/en/function.shuffle.php

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