Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Сортировка по разным колонкам
Форумы портала PHP.SU » » Работа с файловой системой и файлами » Сортировка по разным колонкам

Страниц (1): [1]
 

1. thefreedom - 27 Августа, 2020 - 09:15:51 - перейти к сообщению
Всем дооброго дня.
Пытаюсь организовать сортироквку по разным колонкам с запоминанием.

PHP:
скопировать код в буфер обмена
  1. function cmp($a,$b)
  2. {
  3. return strcmp($a[2], $b[2]);
  4. }


Сортирует по второй колонке, вместо 2 нужно поставить функцию $sort = "2"; чтобы можно было использовать в дальнейшем для кнопочек сортировки:

PHP:
скопировать код в буфер обмена
  1. $sort = "2";
  2. function cmp($a,$b)
  3. {
  4. return strcmp($a[$sort], $b[$sort]);
  5. }


Вылетают ошибки Undefined variable: sort...... Может я что-то не так делаю и так просто в эту функцию нельзя вставлять данные ?!

Подскажите пож. как правильно ?(


usort($myArray, function($a, $b){
return strcmp($a[0], $b[0]);
});
Правильнее сказать можно ли как-то использовать всмето 0 0 любое значение через присвоение...
2. Vladimir Kheifets - 27 Августа, 2020 - 14:49:07 - перейти к сообщению
thefreedom пишет:
Всем дооброго дня.
Пытаюсь организовать сортироквку по разным колонкам с запоминанием.
....
PHP:
скопировать код в буфер обмена
  1. $sort = "2";
  2. function cmp($a,$b)
  3. {
  4. return strcmp($a[$sort], $b[$sort]);
  5. }


Вылетают ошибки Undefined variable: sort...... Может я что-то не так делаю и так просто в эту функцию нельзя вставлять данные ?!

Подскажите пож. как правильно ?(

Добрый день!
значение variable: $sort не передаётся в функцию.
Добавьте аргумент $sort в function cmp($a,$b,$sort),
а в самой функции сделайте сортировку.
Функция strcmp только сравнивает две строки.

Удачи!
3. thefreedom - 27 Августа, 2020 - 15:02:24 - перейти к сообщению
Vladimir Kheifets пишет:
значение variable: $sort не передаётся в функцию.
Добавьте аргумент $sort в function cmp($a,$b,$sort),
а в самой функции сделайте сортировку.
Функция strcmp только сравнивает две строки.



Missing argument 3 for cmp() тогда ошибки о неправильном 3м аргументе (((

PHP:
скопировать код в буфер обмена
  1.  
  2. function cmp($a,$b,$sort)
  3. {
  4. return strcmp($a['$sort'], $b['$sort']);
  5. }
  6.  
4. Vladimir Kheifets - 27 Августа, 2020 - 15:31:56 - перейти к сообщению
thefreedom пишет:
Vladimir Kheifets пишет:
значение variable: $sort не передаётся в функцию.
Добавьте аргумент $sort в function cmp($a,$b,$sort),
а в самой функции сделайте сортировку.
Функция strcmp только сравнивает две строки.



Missing argument 3 for cmp() тогда ошибки о неправильном 3м аргументе (((

PHP:
скопировать код в буфер обмена
  1.  
  2. function cmp($a,$b,$sort)
  3. {
  4. return strcmp($a['$sort'], $b['$sort']);
  5. }
  6.  


При вызове функции должно указываться также три параметра cmp($a,$b,$sort)
Вроде Вы писали, хотите сделать сортировку.
Вас устраивает, что это функция возвращает результат сравнения строк.
Чем Вам не подходят стандартные функции PHP для сортировки по разным колонкам?
5. thefreedom - 27 Августа, 2020 - 15:53:24 - перейти к сообщению
Vladimir Kheifets пишет:
thefreedom пишет:
Vladimir Kheifets пишет:
значение variable: $sort не передаётся в функцию.
Добавьте аргумент $sort в function cmp($a,$b,$sort),
а в самой функции сделайте сортировку.
Функция strcmp только сравнивает две строки.



Missing argument 3 for cmp() тогда ошибки о неправильном 3м аргументе (((

PHP:
скопировать код в буфер обмена
  1.  
  2. function cmp($a,$b,$sort)
  3. {
  4. return strcmp($a['$sort'], $b['$sort']);
  5. }
  6.  


При вызове функции должно указываться также три параметра cmp($a,$b,$sort)
Вроде Вы писали, хотите сделать сортировку.
Вас устраивает, что это функция возвращает результат сравнения строк.
Чем Вам не подходят стандартные функции PHP для сортировки по разным колонкам?


$sort = file_get_contents('sort.txt', true); к примеру в нем будет цифра 3 и подставить её туда. Я просто не настолько силен в PHP поэтому и написал на форуме (((
Нужно отсортировать по первой колонки и оставить так потом по 3 и чтобы оно сохранилось значение в файл к примеру 3 в след раз будет открываться и сразу читать что сортировать по 3ке
6. imbecile - 05 Сентября, 2020 - 03:36:17 - перейти к сообщению
плохому научу )
первой строкой в ф-ции cmp добавьте "global $sort;", $sort из параметров выкиньте
7. LIME - 06 Сентября, 2020 - 00:24:20 - перейти к сообщению
imbecile нельзя
как потом повторно вызывать с другим сорт?? ересь полная
'$sort'
никого ничего не смущает? например интерпретиция строки в одинарных кавычках?
8. imbecile - 11 Сентября, 2020 - 17:47:52 - перейти к сообщению
LIME пишет:
imbecile нельзя
как потом повторно вызывать с другим сорт?? ересь полная

присвоить другое значение $sort в глобальном scope, пожалуйста, перестаньте дуремарить ))
я бы, уж если так припёрло, обернул в класс и использовал бы обращение к свойству в колбэке
LIME пишет:
'$sort'
никого ничего не смущает? например интерпретиция строки в одинарных кавычках?

тс плохо понимает, что пишет
9. LIME - 11 Сентября, 2020 - 23:43:50 - перейти к сообщению
imbecile пишет:
пожалуйста, перестаньте дуремарить ))
именно
переставай фигней страдать
imbecile пишет:
присвоить другое значение $sort в глобальном scope
это называется "шаблонный код"
тоесть тебе перед каждым вызовом надо будет непременно выставить правильный "$sort в глобальном scope", потому как даже если он такой же в следующем вызове, то что если он был изменен другим кодом?
он же глобальный
со всеми вытекающими
вот и будещь строки кода парочкой везде писать))
а еще может влезть какой-нибудь листенер/обсервер посреди работы и поменять $sort как ему будет вздумается
для кого умные дядьки области видимости придумывали а? хулиганье
(Добавление)
или наоборот
другой программист вот такой же умный тоже использует глобальный $sort в этом же проекте, но чуть глупее и не догадался перед каждым вызовом его выставлять(уже ржу)
ты же ему все сломаешь! айай
(Добавление)
$sort имячко-то довольно распространенное
10. imbecile - 22 Сентября, 2020 - 19:21:26 - перейти к сообщению
Вы пропустили фразы "плохому научу" и про колбэк, ну да и пыр с ними
так-то в обществе борьбы с глобальными переменными года с 1993-го ещё состою, если не раньше )))
11. LIME - 22 Сентября, 2020 - 19:49:07 - перейти к сообщению
ну допустим
только чем это проще передачи в параметере я всеравно не понимаю
даже сложнее чуток можно сказать
12. imbecile - 23 Сентября, 2020 - 09:53:58 - перейти к сообщению
LIME пишет:
только чем это проще передачи в параметере я всеравно не понимаю

согласно https://www.php.net/manual/en/function.usort.php в value_compare_func передаются только значения из массива, нет дополнительных параметров, частный случай ебобы разрабов PHP.
13. LIME - 25 Сентября, 2020 - 16:44:38 - перейти к сообщению
ну пожалуй соглашусь что такое решение
PHP:
скопировать код в буфер обмена
  1. function myUsort(&$arr, $columnNum)
  2. {
  3.     return usort($arr, function ($a, $b) use ($columnNum) {
  4.         return strcmp($a[$columnNum], $b[$columnNum]);
  5.     });
  6. }
будет выглядеть для тс как космический корабль
хааа)) ты понял да?)) космический корабль)) <=>
я в ударе блин)

imbecile пишет:
я бы, уж если так припёрло, обернул в класс и использовал бы обращение к свойству в колбэке

объект конечно тоже можно(в том смысле что результат произойдет), но получится сервис с состоянием, что по сути ведет к тем же минусам что и глобальные переменные
то есть ты не можешь с абсолютной уверенностью контролировать состояние между вызовами
конечно если его выставлять на каждый вызов, то вроде минусов и нет
но мы не знаем как изменится в будущем наш класс
возьмем и проглядим в будущем изменение меняющее состояние и надеющееся на это
лучше всегда делать сервисы без состояния вообще
есть такой принцип в DDD

 

Powered by ExBB FM 1.0 RC1