[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Три задачи с Двумерным массивом.
linf
Есть массив вида:

PHP
Array
(
    [0] => Array
        
(
            [0] => фраза 1
            
[1] => фраза 2
            
[2] => фраза 2
        
)

    [1] => Array
        
(
            [0] => фраза 3
            
[1] => фраза 3
            
[2] => фраза 4
        
)

    [2] => Array
        
(
            [0] => фраза 5
            
[1] => фраза 6
        
)

)


итд...

КАК МОЖНО ОСУЩЕСТВИТЬ СЛЕДУЮЩЕЕ:
1. Подсчет всех строк массива, тоесть по примеру их должно быть 8. (count не помогает)
2. Как удалить одинаковые значения (из примера например фраза 2 и фраза 2, и так во всех, array_unique не помог.)
3. Как записать эту информацию в CSV файл в виде таблички, что бы было примерно так:
(пример показан после удаления одинаковых значений.)

0 фраза 1
0 фраза 2
1 фраза 3
1 фраза 4
2 фраза 5
2 фраза 6



Спустя 21 минута, 23 секунды (21.08.2009 - 03:36) kirik написал(а):
Свои предположения в виде кода?

Спустя 18 минут (21.08.2009 - 03:54) linf написал(а):
КАК Я УДАЛЯЛ ОДИНАКОВЫЕ ЗНАЧЕНИЯ из массива.
У меня изначально из файла (номер + строка) все считывалось в одномерный массив, а нужное значение снова рассчитывалось так же, как и создавался этот файл-база откуда я считываю.

Свернутый текст
PHP
<? header("Content-Type: text/html; charset=utf-8"); 
echo 
"<STYLE>HTML {font-size: 14px; font-family: Arial;}</STYLE>";

//читаем из файла.
$file = File("base.csv");
for ($a = 0; $a < count($file); $a++)    {
    $out = explode('^', $file[$a]);
    $out = str_replace("#", "", $out);
    $mass[] = $out[1];
                    }

//удаляем повторы
$mass = array_unique($mass);

//очищаем файл (удаляем - создаем)
unlink ("base.csv");
touch ("base.csv");

for ($q = 0; $q < count($mass); $q++)    {

$m_line = mb_strtolower($mass[$q], 'UTF-8');
$long = mb_strlen($m_line, 'utf-8');
for ($i=0; $i< $long; $i++) {
if (mb_substr($m_line, $i, 1, 'utf-8') == "а") {$sum += 1;} 
if 
(mb_substr($m_line, $i, 1, 'utf-8') == "б") {$sum += 2;}  
if 
(mb_substr($m_line, $i, 1, 'utf-8') == "в") {$sum += 3;} 
if 
(mb_substr($m_line, $i, 1, 'utf-8') == "г") {$sum += 4;} 
if 
(mb_substr($m_line, $i, 1, 'utf-8') == "д") {$sum += 5;} 
if 
(mb_substr($m_line, $i, 1, 'utf-8') == "е") {$sum += 6;} 
if 
(mb_substr($m_line, $i, 1, 'utf-8') == "ё") {$sum += 7;} 
if 
(mb_substr($m_line, $i, 1, 'utf-8') == "ж") {$sum += 8;} 
if 
(mb_substr($m_line, $i, 1, 'utf-8') == "з") {$sum += 9;} 
if 
(mb_substr($m_line, $i, 1, 'utf-8') == "и") {$sum += 10;} 
if 
(mb_substr($m_line, $i, 1, 'utf-8') == "й") {$sum += 11;} 
if 
(mb_substr($m_line, $i, 1, 'utf-8') == "к") {$sum += 12;} 
if 
(mb_substr($m_line, $i, 1, 'utf-8') == "л") {$sum += 13;} 
if 
(mb_substr($m_line, $i, 1, 'utf-8') == "м") {$sum += 14;} 
if 
(mb_substr($m_line, $i, 1, 'utf-8') == "н") {$sum += 15;} 
if 
(mb_substr($m_line, $i, 1, 'utf-8') == "о") {$sum += 16;} 
if 
(mb_substr($m_line, $i, 1, 'utf-8') == "п") {$sum += 17;} 
if 
(mb_substr($m_line, $i, 1, 'utf-8') == "р") {$sum += 18;} 
if 
(mb_substr($m_line, $i, 1, 'utf-8') == "с") {$sum += 19;} 
if 
(mb_substr($m_line, $i, 1, 'utf-8') == "т") {$sum += 20;} 
if 
(mb_substr($m_line, $i, 1, 'utf-8') == "у") {$sum += 21;} 
if 
(mb_substr($m_line, $i, 1, 'utf-8') == "ф") {$sum += 22;} 
if 
(mb_substr($m_line, $i, 1, 'utf-8') == "х") {$sum += 23;} 
if 
(mb_substr($m_line, $i, 1, 'utf-8') == "ц") {$sum += 24;} 
if 
(mb_substr($m_line, $i, 1, 'utf-8') == "ч") {$sum += 25;} 
if 
(mb_substr($m_line, $i, 1, 'utf-8') == "ш") {$sum += 26;} 
if 
(mb_substr($m_line, $i, 1, 'utf-8') == "щ") {$sum += 27;} 
if 
(mb_substr($m_line, $i, 1, 'utf-8') == "ь") {$sum += 28;} 
if 
(mb_substr($m_line, $i, 1, 'utf-8') == "ы") {$sum += 29;} 
if 
(mb_substr($m_line, $i, 1, 'utf-8') == "ъ") {$sum += 30;} 
if 
(mb_substr($m_line, $i, 1, 'utf-8') == "э") {$sum += 31;} 
if 
(mb_substr($m_line, $i, 1, 'utf-8') == "ю") {$sum += 32;} 
if 
(mb_substr($m_line, $i, 1, 'utf-8') == "я") {$sum += 33;} 

if 
(mb_substr($m_line, $i, 1, 'utf-8') == "1") {$sum += 1;} 
if 
(mb_substr($m_line, $i, 1, 'utf-8') == "2") {$sum += 2;}
if (mb_substr($m_line, $i, 1, 'utf-8') == "3") {$sum += 3;} 
if 
(mb_substr($m_line, $i, 1, 'utf-8') == "4") {$sum += 4;}
if (mb_substr($m_line, $i, 1, 'utf-8') == "5") {$sum += 5;} 
if 
(mb_substr($m_line, $i, 1, 'utf-8') == "6") {$sum += 6;}
if (mb_substr($m_line, $i, 1, 'utf-8') == "7") {$sum += 7;} 
if 
(mb_substr($m_line, $i, 1, 'utf-8') == "8") {$sum += 8;}
if (mb_substr($m_line, $i, 1, 'utf-8') == "9") {$sum += 9;}
}
    $content = array($sum, $mass[$q]);
    $file = fopen( "base.csv", 'a' );
    fputcsv($file,$content,"^", "#");
    fclose($file);
    unset ($sum);
}
echo "<center>ВСЕ ПЕРЕПИСАНО!</center>";


Но при таком подходе с каждым запуском этого файла моя база становилась все МЕНЬШЕ и МЕНЬШЕ... Поэтому я и решил считать изначальный файл вот так:

PHP
$file = File("base.csv");
for ($a = 0; $a < count($file); $a++)    {
    $out = explode('^', $file[$a]);
    $out = str_replace("#", "", $out);
    $mass[$out[0]][] = $out[1];
                    }


Тоесть в многомерный массив и уже работать с ним, хотя возможно и не оправдано.

Спустя 4 минуты, 32 секунды (21.08.2009 - 03:59) kirik написал(а):
Цитата (linf @ 20.08.2009 - 19:54)
Тоесть в многомерный массив и уже работать с ним, хотя возможно и не оправдано.

Ну нормально, почему нет?

Если у тебя изначально файл .csv, почему ты его не читаешь с помощью fgetcsv()?

Спустя 7 минут, 22 секунды (21.08.2009 - 04:06) linf написал(а):
а есть разница?

Спустя 45 секунд (21.08.2009 - 04:07) linf написал(а):
В общем как быть что бы база при таком поиске одинаковых фраз не становилась меньше раз от раза... =(((

Спустя 22 минуты, 15 секунд (21.08.2009 - 04:29) kirik написал(а):
Кароч.. "Мужик, я тебя не знаю, но я тебя побрею.." smile.gif
Не знаю зачем тебе нужен этот код, и не знаю почему "фраз становится меньше раз от раза", но вот немного измененный вариант:
Свернутый текст
PHP
header('Content-Type: text/html; charset=utf-8');
echo '<STYLE>HTML {font-size: 14px; font-family: Arial;}</STYLE>';

//читаем из файла.
$file = file('base.csv');
for ($a = 0; $a < count($file); $a++) {
    $out = explode('^', $file[$a]);
    $out = str_replace('#', '', $out);
    $mass[] = $out[1];
}

//удаляем повторы
$mass = array_unique($mass);

//очищаем файл (удаляем - создаем)
unlink('base.csv');
touch('base.csv');


$chars = array(
    'а' => 1,
    'б' => 2,
    'в' => 3,
    'г' => 4,
    'д' => 5,
    'е' => 6,
    'ё' => 7,
    'ж' => 8,
    'з' => 9,
    'и' => 10,
    'й' => 11,
    'к' => 12,
    'л' => 13,
    'м' => 14,
    'н' => 15,
    'о' => 16,
    'п' => 17,
    'р' => 18,
    'с' => 19,
    'т' => 20,
    'у' => 21,
    'ф' => 22,
    'х' => 23,
    'ц' => 24,
    'ч' => 25,
    'ш' => 26,
    'щ' => 27,
    'ь' => 28,
    'ы' => 29,
    'ъ' => 30,
    'э' => 31,
    'ю' => 32,
    'я' => 33,

    '1' => 1,
    '2' => 2,
    '3' => 3,
    '4' => 4,
    '5' => 5,
    '6' => 6,
    '7' => 7,
    '8' => 8,
    '9' => 9,
);

for ($q = 0, $c = count($mass); $q < $c; $q++) {
    $m_line = mb_strtolower($mass[$q], 'UTF-8');
    $sum = 0;
    for ($i = 0, $l = mb_strlen($m_line, 'utf-8'); $i < $l; $i++) {
        $char = mb_substr($m_line, $i, 1, 'utf-8');
        if(isset($chars[$char]))
            $sum += $chars[$char];
    }
    $content = array($sum, $mass[$q]);
    $file = fopen('base.csv', 'a');
    fputcsv($file, $content, '^', '#');
    fclose($file);
}
echo '<center>ВСЕ ПЕРЕПИСАНО!</center>';

Спустя 20 минут, 58 секунд (21.08.2009 - 04:50) linf написал(а):
А код мне нужен этот, потому что я вызвался помочь одному сервису в интернете =))

Спустя 10 минут, 5 секунд (21.08.2009 - 05:00) linf написал(а):
Воть так... стер вообще всю базу... эх... хорошо копия осталась...
Может нужно пореже его просто запускать? Хотя как то это уже не стабильно...

Может существует куда более простой способ считать из файла строки и удалив одинаковые, записать его?

Хотя я скорее подумываю выполнять проверку перед заполнением файла, типа: "если такая строка уже есть, то не разрешать запись", как ты думаешь это луче вариант, чем потом удалять одинаковые... Посоветуй...

Спустя 30 минут, 22 секунды (21.08.2009 - 05:31) kirik написал(а):
Я бы посоветовал тебе использовать нормальную базу данных..

Спустя 1 час, 18 минут, 44 секунды (21.08.2009 - 06:49) glock18 написал(а):
word_count, array_unique и вперед с песней. тебе этого вполне хватит, что из одномерного массива собрать все, что тебе надо.


_____________
Live in new format =)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.