二次元配列に対するphpの対応する操作

墨辰丷
リリース: 2023-03-30 07:12:01
オリジナル
6884 人が閲覧しました

この記事では、主に 2 次元配列に対する php の対応する操作を紹介します。興味のある方はぜひ参考にしてください。

ヒント:

array_keys($array) //返回所有键名 
 
array_values($array) //返回所有键值  
 
$result=array_reverse($input); //将数组颠倒,不保留键名 
$result_keyed=array_reverse($input,true); //将数组颠倒,保留键名 
 
array_keys($array,"blue"); //返回值为blue的键名
ログイン後にコピー

1 PHP の 2 次元配列重複排除関数
PHP 配列重複排除用の組み込み関数 array_unique () 、しかしphp array_unique 関数は 1 次元配列にのみ適用され、多次元配列には適用されません。 以下は、2 次元配列の array_unique 関数を提供します


function unique_arr($array2D,$stkeep=false,$ndformat=true) 
{ 
  // 判断是否保留一级数组键 (一级数组键可以为非数字) 
  if($stkeep) $stArr = array_keys($array2D); 
 
  // 判断是否保留二级数组键 (所有二级数组键必须相同) 
  if($ndformat) $ndArr = array_keys(end($array2D)); 
 
  //降维,也可以用implode,将一维数组转换为用逗号连接的字符串 
  foreach ($array2D as $v){ 
    $v = join(",",$v);  
    $temp[] = $v; 
  } 
 
  //去掉重复的字符串,也就是重复的一维数组 
  $temp = array_unique($temp);  
 
  //再将拆开的数组重新组装 
  foreach ($temp as $k => $v) 
  { 
    if($stkeep) $k = $stArr[$k]; 
    if($ndformat) 
    { 
      $tempArr = explode(",",$v);  
      foreach($tempArr as $ndkey => $ndval) $output[$k][$ndArr[$ndkey]] = $ndval; 
    } 
    else $output[$k] = explode(",",$v);  
  } 
 
  return $output; 
}
ログイン後にコピー

2。 2 次元配列の並べ替え方法:

1 次元配列の並べ替えメソッド: パブリック関数:


$array2D = array('first'=>array('title'=>'1111','date'=>'2222'),'second'=>array('title'=>'1111','date'=>'2222'),'third'=>array('title'=>'2222','date'=>'3333')); 
 
 
print_r($array2D); 
print_r(unique_arr($array2D,true));
ログイン後にコピー

最初のグループ: sort と rsort

、PHP 配列のキー値の順序に従って並べ替えasc と desc を逆順にして、同時に破棄します。 配列の本来のインデックス関係は、実際にはインデックスを削除した後に 0 から始まる数値インデックスを再構築することです。

function printr($arr) 
{ 
  echo &#39;<pre class="brush:php;toolbar:false">&#39;;  
  print_r($arr); 
  echo &#39;

'; }
ログイン後にコピー

2 番目の関数セット: asort と arsort、

これら 2 つの関数は、配列の元のインデックス関係を保持し、配列内で sort と rsort を分離できる限り、より強力です。上記の例

$a = array(&#39;a&#39;=>1,2);  
sort($a); printr($a);  
rsort($a); printr($a); 
 
/*Array 
( 
  [0] => 1 
  [1] => 2 
) 
 
Array 
( 
  [0] => 2 
  [1] => 1 
) 
*/
ログイン後にコピー

を、PHP 配列ソート関数の 3 番目のグループである krsort と ksort に置き換えます。これら 2 つの関数は、上記の 2 つのグループとは異なります。 .

$a = array(&#39;a&#39;=>1,2); 
asort($a); printr($a);   
arsort($a); printr($a);  
/* 
Array 
( 
  [a] => 1 
  [0] => 2 
) 
 
Array 
( 
  [0] => 2 
  [a] => 1 
) 
*/
ログイン後にコピー

カスタム関数を使用して PHP 配列をソートする 3 つの関数があります:

uasort は、カスタム関数を使用して PHP 配列のキー値をソートし、元のインデックス関係を保持します。

uksort は、カスタム関数を通じて PHP 配列のキー名を並べ替え、元のインデックス関係を保持します。

usort は、カスタム関数を通じて PHP 配列のキー値を並べ替え、元のインデックス関係を削除し、新しいインデックスを最初から作成します。

以下は


二次元ソート

:

$a = array(&#39;a&#39;=>1,2); 
 ksort($a); printr($a);   
krsort($a); printr($a); 
 
/* 
Array 
( 
  [0] => 2 
  [a] => 1 
) 
 
Array 
( 
  [a] => 1 
  [0] => 2 
) 
*/
ログイン後にコピー

例:

/** 
 * @package   BugFree 
 * @version   $Id: FunctionsMain.inc.php,v 1.32 2005/09/24 11:38:37 wwccss Exp $ 
 * 
 * 
 * Sort an two-dimension array by some level two items use array_multisort() function. 
 * 
 * sortArr($Array,"Key1","SORT_ASC","SORT_RETULAR","Key2"……) 
 * @author           Chunsheng Wang <wwccss@263.net> 
 * @param array  $ArrayData  the array to sort. 
 * @param string $KeyName1  the first item to sort by. 
 * @param string $SortOrder1 the order to sort by("SORT_ASC"|"SORT_DESC") 
 * @param string $SortType1  the sort type("SORT_REGULAR"|"SORT_NUMERIC"|"SORT_STRING") 
 * @return array        sorted array. 
 */ 
function sortArr($ArrayData,$KeyName1,$SortOrder1 = "SORT_ASC",$SortType1 = "SORT_REGULAR") 
{ 
  if(!is_array($ArrayData)) return $ArrayData; 
   
  // Get args number. 
  $ArgCount = func_num_args(); 
  // Get keys to sort by and put them to SortRule array. 
  for($I = 1;$I < $ArgCount;$I ++) 
  { 
    $Arg = func_get_arg($I); 
    if(!eregi("SORT",$Arg)) 
    { 
      $KeyNameList[] = $Arg; 
      $SortRule[]  = &#39;$&#39;.$Arg; 
    } 
    else $SortRule[]  = $Arg; 
  } 
  // Get the values according to the keys and put them to array. 
  foreach($ArrayData AS $Key => $Info) 
  { 
    foreach($KeyNameList AS $KeyName) ${$KeyName}[$Key] = strtolower($Info[$KeyName]); 
  } 
   
  // Create the eval string and eval it. 
  $EvalString = &#39;array_multisort(&#39;.join(",",$SortRule).&#39;,$ArrayData);&#39;; 
  eval ($EvalString); 
  return $ArrayData; 
}
ログイン後にコピー

3.

りー

例:

//################# 示例 ################# 
$arr = array( 
 array( 
   &#39;name&#39;    =>  &#39;学习&#39;, 
   &#39;size&#39;    =>  &#39;1235&#39;, 
   &#39;type&#39;    =>  &#39;jpe&#39;, 
   &#39;time&#39;    =>  &#39;1921-11-13&#39;, 
   &#39;class&#39;    =>  &#39;dd&#39;, 
 ), 
 array( 
   &#39;name&#39;    =>  &#39;中国功夫&#39;, 
   &#39;size&#39;    =>  &#39;153&#39;, 
   &#39;type&#39;    =>  &#39;jpe&#39;, 
   &#39;time&#39;    =>  &#39;2005-11-13&#39;, 
   &#39;class&#39;    =>  &#39;jj&#39;, 
 ), 
 array( 
   &#39;name&#39;    =>  &#39;编程&#39;, 
   &#39;size&#39;    =>  &#39;35&#39;, 
   &#39;type&#39;    =>  &#39;gif&#39;, 
   &#39;time&#39;    =>  &#39;1997-11-13&#39;, 
   &#39;class&#39;    =>  &#39;dd&#39;, 
 ), 
 array( 
   &#39;name&#39;    =>  &#39;中国功夫&#39;, 
   &#39;size&#39;    =>  &#39;65&#39;, 
   &#39;type&#39;    =>  &#39;jpe&#39;, 
   &#39;time&#39;    =>  &#39;1925-02-13&#39;, 
   &#39;class&#39;    =>  &#39;yy&#39;, 
 ), 
 array( 
   &#39;name&#39;    =>  &#39;中国功夫&#39;, 
   &#39;size&#39;    =>  &#39;5&#39;, 
   &#39;type&#39;    =>  &#39;icon&#39;, 
   &#39;time&#39;    =>  &#39;1967-12-13&#39;, 
   &#39;class&#39;    =>  &#39;rr&#39;, 
 ), 
); 
 
echo &#39;<pre class="brush:php;toolbar:false">&#39;; 
print_r($arr); echo &#39;<br>&#39;; 
 
//注意:按照数字方式排序时 153 比 65 小 
$temp = sortArr($arr,"name","SORT_ASC","type","SORT_DESC","size","SORT_ASC","SORT_STRING"); 
 
print_r($temp); 
 
echo &#39;
';
ログイン後にコピー

4. 配列から空白要素を削除します

function rebuild_array($arr){ //rebuild a array 
 static $tmp=array(); 
 
 for($i=0; $i<count($arr); $i++){ 
  if(is_array($arr[$i])){ 
    rebuild_array($arr[$i]); 
  }else{ 
    $tmp[]=$arr[$i]; 
  } 
 } 
 
 return $tmp; 
}
ログイン後にコピー

例:

$arr=array(&#39;123.html&#39;,&#39;456.html&#39;,array(&#39;dw.html&#39;,&#39;fl.html&#39;,array(&#39;ps.html&#39;,&#39;fw.html&#39;)),&#39;ab.html&#39;); 
 
// 定义一个三维数组,用来检测我们的函数 
echo &#39;<pre class="brush:php;toolbar:false">&#39;; 
print_r(rebuild_array($arr)); 
echo &#39;
';
ログイン後にコピー

5. 特定の値を取得します。多次元配列の下 キーの下の値を取得して、一次元配列を生成します

function array_remove_empty(&$arr, $trim = true)   
{   
  foreach ($arr as $key => $value) {   
    if (is_array($value)) {   
      array_remove_empty($arr[$key]);   
    } else {   
      $value = trim($value);   
      if ($value == &#39;&#39;) {   
        unset($arr[$key]);   
      } elseif ($trim) {   
        $arr[$key] = $value;   
      }  
    }   
  }   
}
ログイン後にコピー

概要: 上記がこの記事の全内容です。皆さんの学習に役立つことを願っています。

関連する推奨事項:

PHPでヘッダー情報を設定する方法

PHP匿名関数でのuse句の使用

PHPファイルをキャッシュする方法


以上が二次元配列に対するphpの対応する操作の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート