<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Mikrotik.moscow [тема: Функция добавления элемента в массив]</title>
		<link>http://mikrotik.moscow</link>
		<description>Новое в теме Функция добавления элемента в массив форума RouterOS на сайте Mikrotik.moscow [mikrotik.moscow]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Wed, 05 Aug 2026 00:36:55 -0400</pubDate>
		<item>
			<title>Функция добавления элемента в массив</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/83925-funktsiya-dobavleniya-elementa-v-massiv/message381524">Функция добавления элемента в массив</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Такая тема получилась, что я решил добавить свой ответ про функции из прошлого, надеюсь, это немного прояснит пост <img  src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="http://mikrotik.moscow/upload/main/smiles/2/bx_smile_smile.png" border="0" data-code=":)" data-definition="UHD" alt=":)" style="width:20px;height:20px;" title="С улыбкой" class="lazyload bx-smile" />. #4 вместе с #7 — они содержат дополнительную информацию и викторину. <br />
			<i>30.09.2020 23:07:00, SiB.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/83925-funktsiya-dobavleniya-elementa-v-massiv/message381524</link>
			<guid>http://mikrotik.moscow/forum/forum57/83925-funktsiya-dobavleniya-elementa-v-massiv/message381524</guid>
			<pubDate>Wed, 30 Sep 2020 23:07:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Функция добавления элемента в массив</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/83925-funktsiya-dobavleniya-elementa-v-massiv/message381523">Функция добавления элемента в массив</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Спасибо за ваше сообщение. Обязательно учту это в следующий раз, когда буду программировать. <br />
			<i>30.09.2020 17:59:00, Retral.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/83925-funktsiya-dobavleniya-elementa-v-massiv/message381523</link>
			<guid>http://mikrotik.moscow/forum/forum57/83925-funktsiya-dobavleniya-elementa-v-massiv/message381523</guid>
			<pubDate>Wed, 30 Sep 2020 17:59:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Функция добавления элемента в массив</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/83925-funktsiya-dobavleniya-elementa-v-massiv/message381522">Функция добавления элемента в массив</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Меня в таких решениях обычно беспокоит вопрос: что же там происходит «под капотом»… Может, это моя ошибка, ведь я начал программировать 40 лет назад, и тогда красивые решения часто оказывались слишком медленными для практического применения. Конечно, сегодня ситуация немного изменилась, хотя многие тормоза современных систем всё ещё можно объяснить небрежным кодом от людей, которые не знают, что такое эффективность. Вот, например, выражение :set $MyArray ($MyArray, $Value); выглядит красиво и просто, но я боюсь, что при добавлении каждого нового значения оно копирует весь существующий массив целиком. А это может обернуться катастрофой, если в массиве много элементов. <br />
			<i>27.08.2019 09:39:00, pe1chl.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/83925-funktsiya-dobavleniya-elementa-v-massiv/message381522</link>
			<guid>http://mikrotik.moscow/forum/forum57/83925-funktsiya-dobavleniya-elementa-v-massiv/message381522</guid>
			<pubDate>Tue, 27 Aug 2019 09:39:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Функция добавления элемента в массив</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/83925-funktsiya-dobavleniya-elementa-v-massiv/message381521">Функция добавления элемента в массив</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Этот способ больше похож на объединение двух переменных, чем на работу с массивом. Лучший способ работать с массивами выглядит так: &nbsp;<br />{ &nbsp;<br />:local myarray {type="ford";model="mustang";color="green"} &nbsp;<br />:set ( "$myarray"-&gt;"year" ) "2015" &nbsp;<br />:set ( "$myarray"-&gt;"color" ) "blue" &nbsp;<br />:put $myarray &nbsp;<br />:put ( "$myarray"-&gt;"model" ) &nbsp;<br />} &nbsp;<br />color=blue;model=mustang;type=ford;year=2015 &nbsp;<br />mustang &nbsp;<br /><br />Здесь мы делаем следующее: создаём массив, добавляем элемент year и устанавливаем его в 2015, меняем элемент color на blue, выводим массив, выводим модель из массива. &nbsp;<br /><br />Таким образом можно работать с массивом, не зная расположения данных, обращаясь к ним по имени. &nbsp;<br /><br />Если сделать так, то будет ошибка и появятся дублирующиеся поля: &nbsp;<br />:set $myarray ($myarray, "color=white") &nbsp;<br /><br />Пример: &nbsp;<br />{ &nbsp;<br />:local myarray {type="ford";model="mustang";color="green";year=2012} &nbsp;<br />:set $myarray ($myarray, "color=white") &nbsp;<br />:put $myarray &nbsp;<br />} &nbsp;<br />color=white;color=green;model=mustang;type=ford;year=2012 &nbsp;<br /><br />Так машина белая или зелёная? <br />
			<i>27.08.2019 07:02:00, Jotne.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/83925-funktsiya-dobavleniya-elementa-v-massiv/message381521</link>
			<guid>http://mikrotik.moscow/forum/forum57/83925-funktsiya-dobavleniya-elementa-v-massiv/message381521</guid>
			<pubDate>Tue, 27 Aug 2019 07:02:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Функция добавления элемента в массив</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/83925-funktsiya-dobavleniya-elementa-v-massiv/message381520">Функция добавления элемента в массив</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Всё это выглядит слишком замысловато. Правильный способ таков: :set $MyArray ($MyArray, $Value); <br />
			<i>29.04.2019 13:14:00, eworm.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/83925-funktsiya-dobavleniya-elementa-v-massiv/message381520</link>
			<guid>http://mikrotik.moscow/forum/forum57/83925-funktsiya-dobavleniya-elementa-v-massiv/message381520</guid>
			<pubDate>Mon, 29 Apr 2019 13:14:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Функция добавления элемента в массив</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/83925-funktsiya-dobavleniya-elementa-v-massiv/message381519">Функция добавления элемента в массив</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Отличная работа, ребята. Похоже, теперь добавлять значения в массивы стало гораздо проще. Например: :local myarray {1;2;3;4} &nbsp;<br />:set ($myarray-&gt;[:len $myarray]) 5  <br />:log info $myarray Выведет: 1;2;3;4;5 Просто делюсь на случай, если кто-то найдёт эту тему. <br />
			<i>27.04.2019 23:04:00, palii.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/83925-funktsiya-dobavleniya-elementa-v-massiv/message381519</link>
			<guid>http://mikrotik.moscow/forum/forum57/83925-funktsiya-dobavleniya-elementa-v-massiv/message381519</guid>
			<pubDate>Sat, 27 Apr 2019 23:04:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Функция добавления элемента в массив</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/83925-funktsiya-dobavleniya-elementa-v-massiv/message381518">Функция добавления элемента в массив</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Спасибо, что поделились! Надеюсь, вам понравится эта короткая функция, которую я сделал для вас: &nbsp;<br /># Использование: [$arrayXpush &lt;$имя массива&gt; &lt;значение&gt; &lt;позиция ключа для вставки значения&gt;]  <br /># &lt;$имя массива&gt; — имя массива, если его нет или не передан массив, функция работает так, будто передан пустой массив &nbsp;<br /># &lt;значение&gt; может быть любым типом, если пустое — просто возвращается $array, если массива нет — возвращается пустой массив &nbsp;<br /># &lt;позиция ключа для вставки значения&gt; — позиция ключа, куда вставить значение &nbsp;<br /># если число &lt; 0 — вставка в начало &nbsp;<br /># если число больше длины массива — вставка в конец &nbsp;<br /># если третий параметр — пустая строка или опущен, по умолчанию значение ставится в конец массива &nbsp;<br /># если третий параметр не число, по умолчанию значение ставится в начало массива &nbsp;<br /><br />:global arrayXpush do={<br /><br /> :local arrX value=[:toarray $1];  <br /> :if ([:len $arrX] = 0) do={ :set $arrX value=[:toarray ""]; };  <br /> :local arrXlen value=[:len $arrX];  <br /><br /> :local valX value=[:tostr $2];  <br /> :if ($valX = "") do={ :return value=$arrX; }; &nbsp;<br /><br /> :local posX value=([:tostr $3]);  <br /> :if ($posX = "") do={ :set $posX value=($arrXlen + 1); }; &nbsp;<br /> :set $posX value=([:tonum $posX] + 0);  <br /> :if ($posX &lt; 0) do={ :set $posX value=0; }; &nbsp;<br /> :if ($posX &gt; $arrXlen) do={ :set $posX value=$arrXlen; }; &nbsp;<br /><br /> :if ($posX = 0) do={ :return value=($valX,$arrX); }; &nbsp;<br /><br /> :if ($posX = $arrXlen) do={ :return value=($arrX,$valX); }; &nbsp;<br /><br /> :return value=([:pick $arrX 0 ($posX - 1)],$valX,[:pick $arrX ($posX - 1) $arrXlen]);  <br /><br />}; &nbsp;<br /><br />Теперь вы можете попробовать добавить следующее: если 4-й параметр равен "R" и значение &lt;позиции ключа для вставки&gt; находится в пределах массива, функция заменит значение, а не вставит его. <br />
			<i>30.06.2014 17:59:00, rextended.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/83925-funktsiya-dobavleniya-elementa-v-massiv/message381518</link>
			<guid>http://mikrotik.moscow/forum/forum57/83925-funktsiya-dobavleniya-elementa-v-massiv/message381518</guid>
			<pubDate>Mon, 30 Jun 2014 17:59:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Функция добавления элемента в массив</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/83925-funktsiya-dobavleniya-elementa-v-massiv/message381517">Функция добавления элемента в массив</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Вот окончательная версия функции, я добавил возможность вставлять значение в определённую позицию ключа внутри массива. Использование: [$arrayPush &lt;$название массива&gt; &lt;позиция ключа для вставки значения (0-n или -1)&gt;]. Введите имя массива, значение и позицию ключа, куда нужно поместить значение. Чтобы добавить значение в конец массива, укажите -1. Если массив ещё не существует, необходимо объявить переменную и присвоить ей "" перед вызовом функции.<br /><br />:global arrayPush do={<br /> &nbsp;:if ($2="") do={<br /> &nbsp; &nbsp;:error "Вы не указали значение для добавления в массив."<br /> &nbsp;}<br /> &nbsp;:if ($1!="" && $3="") do={<br /> &nbsp; &nbsp;:error "Вы не указали позицию ключа для вставки значения в массив."<br /> &nbsp;}<br /> &nbsp;:if (($3&lt;(-1)) || (([:typeof $3]!="num") && ([:typeof $3]!="str")) || ($3&gt;([:len $1]-1))) do={<br /> &nbsp; &nbsp;:error "Неверный аргумент 2."<br /> &nbsp;}<br /> &nbsp;:local string;<br /> &nbsp;:if ([:typeof $1]="array" && $3=(-1)) do={<br /> &nbsp; &nbsp;:foreach item in=$1 do={<br /> &nbsp; &nbsp; &nbsp;:set string ($string . "," . $item);<br /> &nbsp; &nbsp;}<br /> &nbsp; &nbsp;:set string ($string . "," . $2);<br /> &nbsp; &nbsp;:set string [:toarray $string];<br /> &nbsp; &nbsp;:return $string;<br /> &nbsp;}<br /> &nbsp;:if ([:typeof $1]="array" && [:len $1]&gt;="0") do={<br /> &nbsp; &nbsp;:local counter "0";<br /> &nbsp; &nbsp;:foreach item in=$1 do={<br /> &nbsp; &nbsp; &nbsp;:if ($counter!=[:tonum $3]) do={<br /> &nbsp; &nbsp; &nbsp; &nbsp;:set string ($string . "," . $item);<br /> &nbsp; &nbsp; &nbsp; &nbsp;:set counter ($counter+1);<br /> &nbsp; &nbsp; &nbsp;} else={<br /> &nbsp; &nbsp; &nbsp; &nbsp;:set string ($string . "," . $2);<br /> &nbsp; &nbsp; &nbsp; &nbsp;:set string ($string . "," . $item);<br /> &nbsp; &nbsp; &nbsp; &nbsp;:set counter ($counter+1);<br /> &nbsp; &nbsp; &nbsp;}<br /> &nbsp; &nbsp;}<br /> &nbsp; &nbsp;:set string [:toarray $string];<br /> &nbsp; &nbsp;:return $string;<br /> &nbsp;}<br /> &nbsp;:if ($1="") do={<br /> &nbsp; &nbsp;:set string $2;<br /> &nbsp; &nbsp;:set string [:toarray $string];<br /> &nbsp; &nbsp;:return $string;<br /> &nbsp;}<br />} <br />
			<i>30.06.2014 16:02:00, royalpublishing.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/83925-funktsiya-dobavleniya-elementa-v-massiv/message381517</link>
			<guid>http://mikrotik.moscow/forum/forum57/83925-funktsiya-dobavleniya-elementa-v-massiv/message381517</guid>
			<pubDate>Mon, 30 Jun 2014 16:02:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Функция добавления элемента в массив</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/83925-funktsiya-dobavleniya-elementa-v-massiv/message381516">Функция добавления элемента в массив</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Это прекрасно <br />
			<i>27.08.2019 02:34:00, Retral.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/83925-funktsiya-dobavleniya-elementa-v-massiv/message381516</link>
			<guid>http://mikrotik.moscow/forum/forum57/83925-funktsiya-dobavleniya-elementa-v-massiv/message381516</guid>
			<pubDate>Tue, 27 Aug 2019 02:34:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Функция добавления элемента в массив</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/83925-funktsiya-dobavleniya-elementa-v-massiv/message381515">Функция добавления элемента в массив</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Отлично! Спасибо за это. Я не знал, что можно так добавлять элементы в массивы (даже объединять другие массивы!). <br />
			<i>29.04.2019 13:22:00, palii.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/83925-funktsiya-dobavleniya-elementa-v-massiv/message381515</link>
			<guid>http://mikrotik.moscow/forum/forum57/83925-funktsiya-dobavleniya-elementa-v-massiv/message381515</guid>
			<pubDate>Mon, 29 Apr 2019 13:22:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Функция добавления элемента в массив</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/83925-funktsiya-dobavleniya-elementa-v-massiv/message381514">Функция добавления элемента в массив</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Я создал простую функцию для добавления элементов в массив, но столкнулся с некоторыми проблемами. Функция работает нормально, если имя массива, которое передаешь как первый аргумент, уже существует, переменная действительно является массивом, а значение не равно null. Я хотел бы вызывать эту функцию так, чтобы, если массива ещё нет, она создавала его и добавляла второй параметр. Проблема в том, что если массива нет, его значение равно nil, и получается, что первый аргумент как будто не передавали, из-за чего выходят странные результаты.<br /><br />Вот сама функция.<br /><br />Usage: [$arrayPush]  <br />Вводишь имя массива и значение, которое нужно добавить в конец массива:<br /><br />:global arrayPush do={<br /> &nbsp;:if ($1=“”) do={ :error “Вы не указали имя массива.”; }<br /> &nbsp;:if ($2=“”) do={ :error “Вы не указали значение для добавления.”; }<br /> &nbsp;:local string;<br /> &nbsp;:if ([:typeof $1]=“array”) do={<br /> &nbsp; &nbsp;:foreach item in=$1 do={<br /> &nbsp; &nbsp; &nbsp;:set string ($string . “,” . $item);<br /> &nbsp; &nbsp;}<br /> &nbsp; &nbsp;:set string ($string . “,” . $2);<br /> &nbsp; &nbsp;:set string [:toarray $string];<br /> &nbsp; &nbsp;:return $string;<br /> &nbsp;} else={<br /> &nbsp; &nbsp;:error “Первый аргумент не является массивом.”;<br /> &nbsp;}<br />}<br /><br />Вот пример, что я имею в виду:<br /><br />:global myVar; &nbsp;<br />:set myVar [:toarray $myVar];  <br />:set myVar [$arrayPush $myVar “some value”];<br /><br />Поскольку $myVar равен nil, функция toarray по сути ничего не делает, и следующая строка даёт неожиданные результаты. Точно объяснить сложно, но надеюсь, суть понятна. Есть идеи, как это обойти? Сейчас я могу только проверить, существует ли массив перед вызовом функции, и если нет — создать переменную как строку, а потом конвертировать в массив, но это слишком много лишних шагов. <br />
			<i>12.06.2014 21:53:00, royalpublishing.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/83925-funktsiya-dobavleniya-elementa-v-massiv/message381514</link>
			<guid>http://mikrotik.moscow/forum/forum57/83925-funktsiya-dobavleniya-elementa-v-massiv/message381514</guid>
			<pubDate>Thu, 12 Jun 2014 21:53:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
	</channel>
</rss>
