最初の smarty 配列要素を取得するにはどうすればよいですか?
実際、私はこれを行う方法を知っています...しかし、次の問題があります。
このような配列が渡されます
[DATA] => Array
(
[12] => Array
(
[content] => foobar
)
[1] => Array
(
[content] =>
)
[2] => Array
(
[content] =>
)
[3] => Array
(
[content] =>
)
//this is a snipit of {$myVar|@print_r}
これは、[11]
何らかの理由で、この位置には no[0]
と aがありません。[12]
これが常に 12 になるかどうかはわかりませんが、常に最初の位置にあることはわかっています。
同じ並べ替え順序を持つ別の配列があり、後で出力するためにこの順序を維持する必要があるため、この配列を並べ替えることができません。
orを使用せずに最初の要素を選択する方法はありますarray[0]
かarray.0
?
情報:現在取り組んでいるプロジェクトでは Smarty 2 を使用しています
編集
- 方法がわかれば、配列のインデックスを再作成します:)
数時間後に回答があったので、一時的に問題を解決しました。
これを解決するために{php}
、smarty で開き、必要な配列を取得し、それを 2 つの配列に分割しました (もちろん、インデックスを再作成して から開始します0
)。各配列のpos0
を一時配列に一時保存するよりも。orig0
をアンダースコア (_) でオーバーライドし、それらをマルチソートするよりも元の値を0
戻して、$this->_tpl_vars
非常に複雑な方法に戻します。(すべて tpl 内)
{php}
// get array data and re-index it
$i=0;
foreach( $this->_tpl_vars['options'] as $option )
{
foreach( $option['DATA'] as $data )
$array[$i][] = $data;
$i++;
}
//delete empty entrys
$i=0;
foreach( $array[1] as $data ){
if(trim($data['content']) != ""){
$s[] = $array[0][$i];
$a[] = $array[1][$i];
}
$i++;
}
//temp save first values
$tmp_s = $s[0];
$tmp_a = $a[0];
//override first values to have a clean sort and keep them values on pos 0
$s[0] = $a[0] = "_";
//sort the arrays
array_multisort($s,$a);
//putting back the original values
$s[0] = $tmp_s;
$a[0] = $tmp_a;
//pass the array back to tpl_vars
$this->_tpl_vars['new_options'][] = $s;
$this->_tpl_vars['new_options'][] = $a;
{/php}