Как сравнить части строк (php)?

12
C
На сайте с 17.05.2012
Offline
69
clb
2020

В файле есть строки. В каждой строке 5 значений. Есть строки у которых первые значения одинаковы. Как можно вывести строки, исключив одинаковые?

siv1987
На сайте с 02.04.2009
Offline
427
#1

1. Собираем строки в массив

2. Запускаем цикл по массиву, берем текущее значение и проходимся по массиву выявляя "одинаковые"

3. ???

4. ПРОФИТ!

C
На сайте с 17.05.2012
Offline
69
clb
#2

А какой будет код для пункта 2? Как сравнить части строк?

siv1987
На сайте с 02.04.2009
Offline
427
#3
P
На сайте с 03.12.2008
Offline
38
#4

было бы неплохо увидеть строки с файла (несколько)

и что вы хотите получить.

zhitov
На сайте с 30.01.2005
Offline
219
#5
clb:
Как можно вывести строки, исключив одинаковые?

Одинаковые - обе исключаются из вывода или одну показать надо?

Если второе - используйте array_unique

Строительные калькуляторы ( https://www.zhitov.com/ )
D
На сайте с 01.12.2012
Offline
2
#6

clb, обычно такие вопросы задают с примерами входных данных.

Я бы разбил строки на значения, получив многомерный массив. Многомерный массив можно уникализировать одной из функций, представленных в комментариях тут. Дальше объединяем значения в строки и выводим.

EE
На сайте с 15.12.2012
Offline
4
#7

Я бы распарсил бы строку по символу "\n", и запихниул бы в массив вида

arr[0] = "2 2 3 4 1";

arr[..] = "2 6 3 8 1";

arr[n] = "1 8 3 4 2";

Далее распарсил бы по пробелу (ну или какой там разделитель значений), сравнил бы, и в случае true вывел то что надо.

А вообще-то надо видеть задачу.

C
На сайте с 17.05.2012
Offline
69
clb
#8
Prividenie:
было бы неплохо увидеть строки с файла (несколько)
и что вы хотите получить.

Файл имеет такие строки:

Товар1;588;4000;452;10

Товар1;5048;4000;452;10

Товар1;665;4000;452;10

Товар1;1204;4000;452;10

Товар2;477;3000;352;5

Товар2;693;3000;352;5

Товар3;2035;2000;152;3

Товар3;535;2000;152;3

Товар3;3985;2000;152;3

...

Нужно вывести так:

Товар1 1024 4000 452 10

Товар2 693 3000 352 5

Товар3 3985 2000 152 3

zhitov
На сайте с 30.01.2005
Offline
219
#9
Товар1;588;4000;452;10
Товар1;5048;4000;452;10
Товар1;665;4000;452;10
Товар1;1204;4000;452;10

Любое рандомное значение из группы?

Или первое, или последнее? Или наименьшее/наибольшее?

Четче ставьте задачу.

bums
На сайте с 03.07.2006
Offline
449
#10
clb:
Нужно вывести так:
Товар1 1024 4000 452 10
Товар2 693 3000 352 5
Товар3 3985 2000 152 3

csv.csv это твой файл, можно как то так

$handle = fopen("csv.csv", "r");
while (($a1 = fgetcsv($handle,1000,";")) !== false) {
$i = $a1[1];
unset($a1[1]);
$a2[$i] = implode(";",$a1);
}

$a3 = array_unique($a2);

foreach($a3 as $k=>$v) {
$a4 = str_getcsv($v,';');
echo $a4[0] ." ". $k ." ". $a4[1] ." ". $a4[2] ." ". $a4[3] ."\n";
}
результат
Товар1 588 4000 452 10
Товар2 477 3000 352 5
Товар3 2035 2000 152 3
это первые уникальные строки из файла, если надо какой то порядок, то поиграть с сортировкой
Недорогая регистрация и продление доменов RU/SU/РФ/COM/NET/ORG/и т.д. ( https://www.regnic.name/?sesign ) в РЕГРУ, РЕГТАЙМ, Р01, РУЦЕНТР. А так же хостинг и SSL сертификаты.
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий