<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=425509&amp;view=findpost&amp;p=3858674</guid>
        <pubDate>Sat, 05 Feb 2022 21:01:28 +0000</pubDate>
        <title>Перевести код работы с массивом из PHP на Delphi</title>
        <link>https://forum.sources.ru/index.php?showtopic=425509&amp;view=findpost&amp;p=3858674</link>
        <description><![CDATA[chaser: Необходимо перевести код работы с массивом из PHP на Delphi<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">$files[&#39;qaz1.txt&#39;][] = array(&#39;20kb,&#39; &#39;readonly&#39;);</div><div class="code_line">$files[&#39;qaz1.txt&#39;][] = array(&#39;30kb,&#39; &#39;archive&#39;);</div><div class="code_line">$files[&#39;qaz1.txt&#39;][] = array(&#39;40kb,&#39; &#39;readonly&#39;);</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
Т.е. на PHP мы можем очень просто получить значение 30кб: &#036;d = &#036;files[&#39;qaz1.txt&#39;][1][0];<br>
<br>
А как сделать подобное на Delphi?<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Мне вот как так нужно<br>
<br>
[товар1][0] = array(&#39;10&#39;, &#39;20&#39;)<br>
[товар1][1] = array(&#39;15&#39;, &#39;30&#39;)<br>
[товар1][2] = array(&#39;12&#39;, &#39;10&#39;)<br>
<br>
[товар2][0] = array(&#39;11&#39;, &#39;20&#39;)<br>
[товар2][1] = array(&#39;25&#39;, &#39;30&#39;)<br>
[товар2][2] = array(&#39;32&#39;, &#39;10&#39;)<br>
<br>
ну в крайнем случае так, но это избыточно<br>
<br>
[0][0] = array(&#39;name1&#39;, &#39;&#39;)<br>
[0][1] = array(&#39;10&#39;, &#39;20&#39;)<br>
[0][2] = array(&#39;15&#39;, &#39;30&#39;)<br>
[0][3] = array(&#39;12&#39;, &#39;10&#39;)<br>
<br>
[1][0] = array(&#39;name2&#39;, &#39;&#39;)<br>
[1][1] = array(&#39;10&#39;, &#39;20&#39;)<br>
[1][2] = array(&#39;15&#39;, &#39;30&#39;)<br>
[1][3] = array(&#39;12&#39;, &#39;10&#39;)</div></div><br>
Пробовал TDictionary, но возникли трудности: не совсем понятно, как получить число дочерних элементов например товара 1, и как их перебрать в цикле.<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;key: string;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;MyFiles: TDictionary&#60;String,TDictionary&#60;Integer,TA&#62;&#62;;</div><div class="code_line">&nbsp;&nbsp;fl: TDictionary&#60;Integer,TA&#62;;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;MyFiles := TDictionary&#60;String,TDictionary&#60;Integer,TA&#62;&#62;.Create;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;fl := TDictionary&#60;Integer,TA&#62;.Create;</div><div class="code_line">&nbsp;&nbsp;fl.Add(0, [&#39;120&#39;,&#39;20&#39;]);</div><div class="code_line">&nbsp;&nbsp;fl.Add(1, [&#39;10&#39;,&#39;20&#39;]);</div><div class="code_line">&nbsp;&nbsp;fl.Add(2, [&#39;10&#39;,&#39;20&#39;]);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;MyFiles.Add(&#39;Товар 1&#39;, fl);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;fl.Free;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;fl := TDictionary&#60;Integer,TA&#62;.Create;</div><div class="code_line">&nbsp;&nbsp;fl.Add(0, [&#39;15&#39;,&#39;25&#39;]);</div><div class="code_line">&nbsp;&nbsp;fl.Add(1, [&#39;15&#39;,&#39;25&#39;]);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;MyFiles.Add(&#39;Товар 2&#39;, fl);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;fl.Free;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;{fl := TDictionary&#60;Integer,TA&#62;.Create;</div><div class="code_line">&nbsp;&nbsp;fl.Add(3, [&#39;20&#39;,&#39;30&#39;]);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;MyFiles.Add(&#39;Товар 1&#39;, fl);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;fl.Free;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Memo1.Lines.Clear;</div><div class="code_line">&nbsp;&nbsp;Memo1.Lines.Add(&#39;Items count: &#39; + IntToStr(MyFiles.Count));</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;if MyFiles.ContainsKey(&#39;Товар 1&#39;) then</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;Memo1.Lines.Add(&#39;Objecs count: &#39; + IntToStr(MyFiles[&#39;Товар 1&#39;].Count));</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Memo1.Lines.Add(&#39;Objecs count: &#39; + IntToStr(MyFiles.Items[&#39;Товар 1&#39;].Keys.Count));</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;fl := TDictionary&#60;Integer,TA&#62;.Create;</div><div class="code_line">&nbsp;&nbsp; &nbsp;fl := MyFiles[&#39;Товар 1&#39;];</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Memo1.Lines.Add(&#39;&quot;Товар 1&quot; оjecs count: &#39; + IntToStr(fl.Count));</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;fl.Free;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Memo1.Lines.Add(&#39;&#39;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for key in MyFiles.Keys do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Memo1.Lines.Add(key + &#39;: &#39; + IntToStr(MyFiles[key].Count));</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;MyFiles.Free;</div><div class="code_line">end;</div></ol></div></div></div></div><br>
Используя Count также получаю что-то несуразное для дочерних элементов первого товара.<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Items count: 2<br>
Objecs count: 16<br>
&quot;Товар 1&quot; оjecs count: 0<br>
<br>
Товар 1: 0<br>
Товар 2: 0</div></div><br>
Да и закоментированный &quot;fl.Add(3, [&#39;20&#39;,&#39;30&#39;]);&quot; - у меня есть рекурсия - сканирование папок, в них файлы, так вот все дочерние элементы добавляются не за один раз, а при каждом проходе. Пока до этого не дошел даже.<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">if(mb_strpos($dir.&quot;/&quot;.$v, &#39;/Фото/&#39;))</div><div class="code_line">$files[$shk][] = array($dir.&quot;/&quot;.$v, &#39;[Фото]&#39;, $shk, $category);</div><div class="code_line">else</div><div class="code_line">if(mb_strpos($dir.&quot;/&quot;.$v, &#39;/Инфографика/&#39;))</div><div class="code_line">$files[$shk][] = array($dir.&quot;/&quot;.$v, &#39;[Инфографика]&#39;, $shk, $category);</div><div class="code_line">else</div></ol></div></div></div></div>]]></description>
        <author>chaser</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	