|
|
|
| Пример $arr :
Array
(
[0] => Array
(
[word] => груша
[count] => 0
)
[1] => Array
(
[word] => яблоко
[count] => 0
)
)
|
надо среди многомерного массива найти наименьший count и вернуть индекс.
function min_r($arr){
$min = $arr[0]['count'];
for($i=0;$i<count($arr);$i++){
$arr_r[$arr[$i]['count']][] = $i;
if($arr[$i]['count']<$min){
$min = $arr[$i]['count'];
}
}
return $arr_r[$min];
}
//пример использования:
$s_rand = min_r($arr);
$rand = $s_rand[rand(0,count($s_rand)-1)]; // случайным образом выбирается индекс из наименьших.
|
с помощью данной функции возникает перегруз Allowed memory size of 8388608 bytes exhausted. при обработки большого кол-во массивов в цикле используется данная функция поиска минимума.
Надо както оптимизировать ее работу .. но как я не могу придумать.
Поможите люди с оптимизацие процесса... | |
|
|
|
|
|
|
|
для: sidPR
(08.02.2008 в 13:21)
| |
function min_r($arr)
{
$index = 0;
$min = $arr[$index]['count'];
for($i=1;$i<count($arr);$i++)
{
if ($arr[$i]['count']<$min)
{
$min = $arr[$i]['count'];
$index=$i;
}
}
return $arr[$index];
}
|
| |
|
|
|
|
|
|
|
для: MIchail1982
(08.02.2008 в 13:36)
| | не работает ваша функция :( я на выходе должен получить чтото типо
Array
(
[0] => 0
[1] => 1
)
|
| |
|
|
|
|
|
|
|
для: sidPR
(08.02.2008 в 13:56)
| | я из неё получил
Array
(
[count] => 2
[word] => word_0
)
|
| |
|
|
|
|
|
|
|
для: MIchail1982
(08.02.2008 в 14:25)
| | нет мне нужне результат массив с минимальными индексами .
2 2 3 4 => будет массив с 2 2 соответсвенно индексы этих минимумов
2 1 3 4 = > будет только 1
3 3 3 3 => будет 3 и так далее
а на выводе будет массив с индексами | |
|
|
|
|
|
|
|
для: sidPR
(08.02.2008 в 14:28)
| | так?
function min_r($arr)
{
$min = $arr[0]['count'];
for($i=1;$i<count($arr);$i++)
{
if ($arr[$i]['count']<$min)
{
$min = $arr[$i]['count'];
unset($index);
$index[]=$i;
}
elseif ($arr[$i]['count']==$min)
{
$index[]=$i;
}
}
return $index;
}
|
| |
|
|
|
|
|
|
|
для: MIchail1982
(08.02.2008 в 14:37)
| | Вообще перестал работать :) | |
|
|
|
|
|
|
|
для: sidPR
(08.02.2008 в 15:33)
| |
function min_r($arr)
{
$min = $arr[0]['count'];
$index[]=0;
for($i=1;$i<count($arr);$i++)
{
if ($arr[$i]['count']<$min)
{
$min = $arr[$i]['count'];
unset($index);
$index[]=$i;
}
elseif ($arr[$i]['count']==$min)
{
$index[]=$i;
}
}
return $index;
}
|
| |
|
|
|
|
|
|
|
для: MIchail1982
(08.02.2008 в 16:16)
| | а чем моя функция хуже в таком случае чем ваша ? | |
|
|
|
|
|
|
|
для: sidPR
(08.02.2008 в 16:36)
| | Ваша хранит данные об индексах всех элементов, дублируя их в памяти. А функция MIchail1982 - только об индексах предполагаемого наименьшего элемента, в каждый отдельный момент времени. У вас ведь проблема и была в превышении лимита ОП. | |
|
|
|
|
|
|
|
для: Shiva
(08.02.2008 в 16:52)
| | MIchail1982 Спасибо.. но не помогло видимо другие функции тоже построены не правильно и оч много хранят в себе что скрипт не справляется :( | |
|
|
|
|
|
|
|
для: sidPR
(08.02.2008 в 16:59)
| | моя функция работает с 350000 записей(на 400000 загибается)
попробуйте разбить ваш массив на куски
$new_arr = array_chunk($arr, 10000, TRUE);
foreach ($new_arr as $arr_2)
$temp = min_r($arr_2);
|
и потом взять и сравнить минимальные элементы | |
|
|
|
|
|
|
|
для: MIchail1982
(08.02.2008 в 17:20)
| | Это зачем? Чтобы еще под $new_arr память отвести?
С подавляющей вероятностью, проблема с памятью теперь не в этой функции, а в других частях файла. | |
|
|
|
|
3.5 Кб |
|
|
для: Shiva
(08.02.2008 в 17:23)
| | Вложил в пост листинг программы ... | |
|
|
|
|
|
|
|
для: sidPR
(08.02.2008 в 17:30)
| |
function min_r($arr)
{
$min = $arr[0]['count'];
$index[]=0;
for($i=1;$i<count($arr);$i++)
{
if($arr[$i]['count']<$min){
$min = $arr[$i]['count'];
unset($index);
$index[]=$i;
}
elseif ($arr[$i]['count']==$min){
$index[]=$i;
}
}
return $index;
}
|
[Fri Feb 15 12:48:28 2008] [error] PHP Notice: Undefined offset: 12 html/index.php on line 62
[Fri Feb 15 12:48:28 2008] [error] PHP Notice: Undefined offset: 12 html/index.php on line 63
|
62 if($arr[$i]['count']<$min){
63 $min = $arr[$i]['count'];
|
Где ошибка ? | |
|
|
|