Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [PHP] Объединение массивов. / 10 сообщений из 10, страница 1 из 1
18.07.2014, 10:45
    #38700057
Serzh007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Объединение массивов.
Как слить два массива так, чтобы сократились все повторения и при этом не было пустых строк в полученном массиве.
Пробовал array_merge() и потом array_unique() но одинаковые записи после сокращения оставляли пустые строки в массиве.
...
Рейтинг: 0 / 0
18.07.2014, 10:47
    #38700062
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Объединение массивов.
andrejkКак слить два массива так, чтобы сократились все повторения и при этом не было пустых строк в полученном массиве.
Пробовал array_merge() и потом array_unique() но одинаковые записи после сокращения оставляли пустые строки в массиве.
чего?
...
Рейтинг: 0 / 0
18.07.2014, 11:07
    #38700097
Serzh007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Объединение массивов.
Того, что после array_unique() дубликаты исчезают, но остаются их пустые ячейки.
...
Рейтинг: 0 / 0
18.07.2014, 11:12
    #38700107
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Объединение массивов.
andrejkТого, что после array_unique() дубликаты исчезают, но остаются их пустые ячейки.
враньё.
...
Рейтинг: 0 / 0
18.07.2014, 11:17
    #38700112
Serzh007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Объединение массивов.
ScareCrowandrejkТого, что после array_unique() дубликаты исчезают, но остаются их пустые ячейки.
враньё.
Привожу весь код)

Код: php
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.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
<?php
if ($_POST["vvod_slov"])
{
	$podkluchenie = mysql_connect("ццц","ццц","ццц")  or die("MySQL сервер недоступен!".mysql_error());
	mysql_query("SET character_set_database=utf8"); 
	mysql_query("SET NAMES utf8");	
	mysql_select_db("webart_servis_kluchevyx_slov", $podkluchenie) or die("MySQL сервер недоступен!".mysql_error());

	$vvod_slov = $_POST["vvod_slov"]; //помещаем в переменную опорные слова строкой
	$oporn_slova = explode("\n", $vvod_slov);//разбиваем строку опорных слов на части и заносим их в массив(есть лишние пробелы)

	for ($i = 0; $i < count($oporn_slova); $i++)//перебираем массив из строки в новый массив (без лишних пробелов)
		{
		$oporn_slova_bez_probelov[$i] = trim($oporn_slova[$i]);
		}
	
	$osnova_stroki_zaprosa = implode("', '", $oporn_slova_bez_probelov);//делаем из массива опорных слов основу строки для sql запроса
	$stroka_zaprosa = "'" . $osnova_stroki_zaprosa . "'";//окончательно формируем строку для sql запроса
	
	$rezultat_podbora = mysql_query//подставляем строку для sql запроса в полный запрос
	("
	 SELECT `slova` FROM `tablizca_slov` WHERE `id` in
	(SELECT `id_slova` FROM `tablizca_svyazej` WHERE `id_izobrazheniya` in 
	(SELECT `id_izobrazheniya` FROM `tablizca_svyazej` WHERE `id_slova` in 
	(SELECT `id` FROM `tablizca_slov` WHERE `slova` IN (" . $stroka_zaprosa . "))))
	");
	
$n = 0;//номера ячеек $massiv_rezultata
	while ($data = mysql_fetch_array($rezultat_podbora))//если в $rezultat_podbora нет ни одной записи, то цикл не выполняется
		{
		$massiv_rezultata[$n] = $data['slova'];//массив для вывода результата подбора строкой
		$n++;
		}
		
if ($massiv_rezultata)
{
		$massiv_rezultata = array_merge($oporn_slova_bez_probelov, $massiv_rezultata);
		$massiv_rezultata = array_unique($massiv_rezultata);
	}
	else
	{
		$massiv_rezultata = $oporn_slova_bez_probelov;
		}

	for ($i = 0; $i < count($massiv_rezultata); $i++)
	{
		$a ++; //счётчик для имён флажков в результате подбора
		echo "<input type=\"checkbox\" name=\"checkbox_" . $a . "\"> " . $massiv_rezultata[$i] . "<br>\n";//выводим результат подбора списком с флажками
		}

	//$rezultat = implode("; ", $massiv_rezultata);//создание строки из массива результата подбора
//	echo $rezultat;
		
	
	mysql_close($podkluchenie);
	echo "<hr class=\"otbivka_24\">";
}
?>
...
Рейтинг: 0 / 0
18.07.2014, 11:27
    #38700126
Serzh007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Объединение массивов.
Вот что выдала print_r ($massiv_rezultata):

Array (
[0] => природа
[1] => гуру
[3] => День святого Валентина
[4] => еда
[5] => знак
[6] => пара
[7] => пейзаж
[9] => радуга
[10] => сердце
[11] => символ
[12] => чашка
)

Какого индексы с пропусками? Млин…
...
Рейтинг: 0 / 0
18.07.2014, 12:33
    #38700217
Serzh007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Объединение массивов.
По-моему, получилось:

Код: php
1.
$massiv_rezultata = array_values(array_unique(array_merge($oporn_slova_bez_probelov, $massiv_rezultata)));
...
Рейтинг: 0 / 0
18.07.2014, 12:42
    #38700234
anvano
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Объединение массивов.
andrejkВот что выдала print_r ($massiv_rezultata):
Какого индексы с пропусками? Млин…


Патамушта в документации это описано:
http://ru2.php.net/manual/en/function.array-unique.php
Note that keys are preserved. array_unique() sorts the values treated as string at first, then will keep the first key encountered for every value, and ignore all following keys.
...
Рейтинг: 0 / 0
18.07.2014, 12:52
    #38700257
anvano
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Объединение массивов.
andrejkПривожу весь код)

Код: php
1.
2.
3.
4.
5.
6.
7.
<?php
	for ($i = 0; $i < count($massiv_rezultata); $i++)
	{
		$a ++; //счётчик для имён флажков в результате подбора
		echo "<input type=\"checkbox\" name=\"checkbox_" . $a . "\"> " . $massiv_rezultata[$i] . "<br>\n";//выводим результат подбора списком с флажками
        }
?>



И, кстати, если бы вы вместо for воспользовались циклом foreach для обхода массива, то проблема с индексами вас бы не волновала.


Код: php
1.
2.
3.
4.
5.
6.
7.
<?php
	foreach ($massiv_rezultata as $key=>$value)
	{
		$a ++; //счётчик для имён флажков в результате подбора
		echo "<input type=\"checkbox\" name=\"checkbox_" . $a . "\"> " . $value. "<br>\n";//выводим результат подбора списком с флажками
        }
?>
...
Рейтинг: 0 / 0
19.07.2014, 22:59
    #38701119
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Объединение массивов.
andrejk,

тут у тебя всего 12 записей, но для больших массивов например на 10 тыс. записей такая задача решается вот так, потому что array_unique и циклы алгоритмически слишком дорого стоят

Код: php
1.
array_values(array_filter(array_flip(array_flip(array_merge($a, $b))));
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [PHP] Объединение массивов. / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]