phpで配列を文字数の多い順にソート(並び替え)するには以下のようにします。
usort($output_array, create_function('$b,$a', 'return mb_strlen($a, "UTF-8") - mb_strlen($b, "UTF-8");'));
uasort($output_array, create_function('$b,$a', 'return mb_strlen($a, "UTF-8") - mb_strlen($b, "UTF-8");'));
例:
$my_array = array(
'あいうえお' ,
'12345789' ,
'長い長い文字列のテストです。' ,
);
print_r($my_array);
usort($my_array, create_function('$b,$a', 'return mb_strlen($a, "UTF-8") - mb_strlen($b, "UTF-8");'));
print_r($my_array);
結果 :
Array
(
[0] => あいうえお
[1] => 12345789
[2] => 長い長い文字列のテストです。
)
Array
(
[0] => 長い長い文字列のテストです。
[1] => 12345789
[2] => あいうえお
)
引用元 : https://goo.gl/uhhq1Z
PHP5.6以降では配列関係の参照渡しの関数にデータを渡す時は一度変数に入れる必要があります。
$new_array = end( array_keys($array) );
$ar_key = array_keys($array);
$new_array = end( $ar_key );
AAA
BBB
DDD
DDD
FFF
↓
AAA
BBB
DDD
FFF
PHPコードは
$my_ar = array(
'AAA' ,
'BBB' ,
'DDD' ,
'DDD' ,
'FFF' ,
);
print_r($my_ar);
$my_ar = array_merge(array_unique($my_ar));
print_r($my_ar);
です。
重複がある時に true を返します
function array_same_values($array) {
return array_unique($array) !== $array;
}
です。 引用 : http://bit.ly/1MRi1fr
PHPでforeachループで回している時に、配列の先頭かどうか?最後かどうか?を調べるには次のようにします。
foreach ($hash as $k => $v) { if (reset(array_keys($hash)) === $k) { print "先頭の要素です"; } if (end(array_keys($hash)) === $k) { print "最後の要素です"; } }
データベースから取得したデータをPHP内で並べ替えたり、ランダムに並び替えたい時があります。 関数【array_multisort】を使ってタイトルでソートするには以下のようにすればOKです。
$loop = array(
array(
'id' => 1,
'title' => 'あいうえお',
),
array(
'id' => 2,
'title' => 'かきくけこ',
),
array(
'id' => 3,
'title' => 'さしすせそ',
),
);
$ids = array();
foreach ($loop as $value) {
array_push($ids,$value['title']);
}
// shuffle($ids); // もしランダムにソートする場合はこのコメントアウトを解除する
array_multisort($ids, SORT_DESC, $loop);
実際には次のように実装します
/**
* このメソッドはハッシュの配列を任意のカラムでソートします(大きい順 DESC )
*
* @param array $loop
* @param string $column_name
*
* @return array $loop
*/
public function loop_sort( $loop, $column_name ){
$ids = array();
foreach ($loop as $value) {
array_push($ids,$value[$column_name]);
}
array_multisort($ids, SORT_DESC, $loop); // 小さい順にする時は SORT_ASC
return $loop;
}
次のように呼び出します。(titleでソートする場合)
$sorted_loop = $this->loop_sort( $original_loop, 'title' );
簡単ですね!
通常( $data を myplugin に渡す )
{$data|myplugin}
引数を2つ($data1, $data2)渡す
{$data1|myplugin:$data2}
引数を3つ($data1, $data2, $data3)渡す
{$data1|myplugin:$data2:$data3}
配列や連想配列($ar_data)を引数として渡す
{$ar_data|@myplugin}
http://d.hatena.ne.jp/seto-san/20081203/1228274418
にありました。
以下引用。(クラスメソッドとして記述してあるので、通常の関数として使用したい場合は)
$target[$key] = $this->_mbConvertEncodingEx($val,$toEncoding,$fromEncoding); ↓ $target[$key] = _mbConvertEncodingEx($val,$toEncoding,$fromEncoding);
とするとよいでしょう。
/** * mb_convert_encoding()の拡張 * * @param mixed $target arrayかstring * @param string $toEncoding エンコード先 * @param string $fromEncoding エンコード元(default:null) * @return mixed arrayが来たらarrayを、stringが来たらstringを */ function _mbConvertEncodingEx($target, $toEncoding, $fromEncoding = null) { if (is_array($target)) { foreach ($target as $key => $val) { if (is_null($fromEncoding)) { $fromEncoding = mb_detect_encoding($val); } $target[$key] = $this->_mbConvertEncodingEx($val,$toEncoding,$fromEncoding); } } else { if (is_null($fromEncoding)) { $fromEncoding = mb_detect_encoding($target); } $target = mb_convert_encoding($target, $toEncoding,$fromEncoding); } return $target; }
Smartyで配列の最初、最後を検知するには ループ名(任意)をつけて
.first
.last
で知ることが出来ます。
{ foreach from=$test_loop key="k" item="v" name="loopname"} { if $smarty.foreach.loopname.first }(最初の要素){$v.name}です。{ /if } { $v.name }です。 { if $smarty.foreach.loopname.last }(最後の要素){$v.name}です。{ /if } { /foreach }
ちなみに配列の長さは @count で求めることが出来ます
{$test_loop|@count}
Smartyはテンプレート内でPHP標準関数が使用できます。
なので
配列 $loop の要素数を知るには
{$loop|@count}
でOKです
{ if count($loop) > 0 }要素数は1以上です{/if}
{ math equation=a+b a=$loop|@count b=2 assign=kekka } {$kekka}
phpの連想配列(ハッシュ)で
$hash=array(
'aa' => 'aiueo' ,
'bb' => 'kakikukeko' ,
'cc' => 'sasisuseso' ,
);
という配列から $hash['bb'] のキーと値を削除するには
unset($hash['bb']);
とします。
※ なおこれは普通の配列には使用しない方がいいです。(削除した配列は「欠番」となりますので、それより後ろのメンバがつまるわけではないため)
普通の配列には array_splice() を使用しましょう。
array_splice ( array &$input , int $offset [, int $length [, mixed $replacement = array() ]] )
配列 input から offset および length で指定された要素を削除し、配列 replacement でそれを置換します
※ 普通の配列の「欠番」をつめる array_values() というのもあります(パフォーマンスをあまり気にしない局面では使えると思います)
$list = array_values($list);
普通にソートすると
img1.png img2.png img10.png img12.png
となってしまう配列を
img1.png img10.png img12.png img2.png
でソートするのが自然順アルゴリズムによるソート(人間が認識しやすいソート)
これは
$arr=new array( 'img2.png', 'img12.png', 'img1.png', 'img10.png' ); natsort($arr);
で実行できます。
natsort(配列):自然順アルゴリズムによるソート natcasesort(配列):自然順アルゴリズムによるソート(大文字小文字の違いを無視)
{if $shop_id|in_array:$list}すでに入っています
{else}配列の中には存在しません
{/if}
Smartyで配列かどうかを判別するには is_array を使用します
{ if is_array($data) } { foreach from=$data key="k" item="v" name="loopname" } {$v|escape} { /foreach } { else } {$data|escape} { /if }
JavaScriptでチェックボックスの値を受け取るには
<form name="FM">の<input type="checkbox" name="order_no[]">時
// form_name var form_name = 'order_no[]'; // length alert('合計' + document.FM.elements[form_name].length + '個のチェックボックスがあります'); // value value_array = new Array(); for (i=0; i<document.FM.elements[form_name].length; i++ ){ if(document.FM.elements[form_name][i].checked == true){ value_array.push(document.FM.elements[form_name][i].value); } } alert('合計' + value_array.length + '個チェックされています'); alert(value_array);