2014-12-15 4 views
1

Я бегу код, где я получаю значение в массиве как:Замена элемента на основе состояния в массиве

URLValue[1]

Этот документ содержит код, например:

a=c&mode=yes&action=right&sortorder=2

Теперь я хочу внести изменения. Если sortorder=2, оно должно изменить это значение на sortorder=1 и наоборот, когда условия меняются, но я не мог найти никакого подхода к этому.

Я проверил arrayFind, но как это будет работать с условием if, чтобы заменить этот порядок сортировки на то, что я запускаю?

Как и проверка, если sortorder=1, сделайте это 2, и если это 2, сделайте это 1, так что я могу правильно выполнить сортировку.

Относительно того, почему я делаю это, есть условие, поскольку это невозможно сделать через jQuery.

Вот это обновление # 1

Видимо, URLValue[1] формируется через URL строки запроса. Так я думал, почему не сделать замену, как это:

<cfif cgi.QUERY_STRING contains 'sortOrder=2'> 
    <cfset URLreplace = 'sortOrder=1'> 
<cfelse> 
    <cfset URLreplace = 'sortOrder=2'> 
</cfif> 

Я думал о чем-то вроде replace или replacelist, но тогда, как я делаю URLReplace в URL, а затем преобразовать это значение в массив?

+1

Какова общая цель здесь? Может быть, происходит чрезмерное осложнение? –

+0

Сортирует ли SortOrder последнее в списке? –

+1

похоже, что он делает тумблер. –

ответ

0

Если все, что вы хотите сделать, это переключить значение порядка сортировки в этом конкретном случае, тогда я бы просто разрезал погоню. Если вы найдете A, замените его на B и наоборот.

<cfif findNoCase("sortOrder=1",urlValue[1])> 
    <cfset urlValue[1] = ReplaceNoCase(urlValue[1],"sortorder=1","sortorder=2")/> 
<cfelseif findNoCase("sortOrder=2",urlValue[1])> 
    <cfset urlValue[1] = ReplaceNoCase(urlValue[1],"sortorder=2","sortorder=1")/> 
</cfif> 

Это означает, что все, что вам нужно, это переключить его. Приведенный выше код всегда будет заменять 1 на 2, если он существует в URL-адресе. Конечно, вы можете добавить дополнительные проверки в свои операторы if в зависимости от того, где эта строка запроса закончится.

+0

Спасибо, Марк, я, эксперты, говорящие здесь, я усложняю вещи, я не хочу, но я работаю над таким материалом, что мне нужно сломать URL-адрес, и извлечь пару его частей и перестроить его снова, лучший способ Я нашел, что нужно делать с ретранслятором adn массивов, поэтому я иду таким образом, –

+0

Именно поэтому, по-вашему, вам нужно вручную разобрать строку запроса? Без более подробной информации кажется, что это можно было бы сделать проще, перейдя через структуру «URL». – Leigh

+0

Исходя из его вопроса, неясно, что он использует строку запроса _actual_ Leigh. Он только сказал, что у него есть массив, называемый 'URLValue [1]', который был сформирован с использованием строки запроса_. Это может означать, что это манипулирует другими способами. Я давал ему решение «разрезать на погоню». Если это действительно URL-область, сводящаяся к var, тогда да, он должен изменить ее в любой точке, в которую он помещен в этот var. –

0

в URLValue[1] формируется через URL строки запроса ... <cfif cgi.QUERY_STRING contains 'sortOrder=2'>

Дэн поднимает хороший момент. Вы можете усложнять ситуацию. Для извлечения параметров не нужно разбирать CGI.QUERY_STRING. Параметры для текущей страницы уже разобраны и доступны в system scope URL.

Чтобы изменить параметр URL, просто введите его имя по URL-адресу. (Если параметр не является обязательным, используйте structKeyExists, чтобы проверить его наличие).

<cfset URL.sortOrder = URL.sortOrder eq 1 ? 2 : 1> 

Тогда, если вам действительно нужно, чтобы преобразовать параметры в массив, только петли через ключи в URL Scope/структуры:

<cfloop collection="#URL#" item="key"> 
    <!--- demo - show parameters ---> 
    <cfoutput> 
     Key name = #key# Value = #URL[key]#<br> 
    </cfoutput> 
    ... do something with the paramters here ... 
</cfloop> 
Смежные вопросы