PHP头条
热点:

php数组相关转化、函数练习,php数组转化函数


$arr1=array(
    0 => Array('子题目' => '11'),
    1 => Array('答案' => 'ada'),
    2 => Array('解析' => '3a'),
	
    3 => Array('子题目' => '121'),
    4 => Array('答案' => 'aa'),
    5 => Array('解析' => '3a'),

    6 => Array('子题目' => '11'),
    7 => Array('答案' => 'aa'),
    8 => Array('解析' => '3da'),
    );

//   将数组 $arr1 转化成  $arr2;



$arr2=array(
    0 => Array('子题目' => '11','答案' => 'ada','解析' => '3a'),

    1 => Array('子题目' => '121','答案' => 'aa','解析' => '3a'),

    2 => Array('子题目' => '11','答案' => 'aa','解析' => '3da'),

    );





// 方法1,利用array_chunk和array_merge()函数;

$arr3 = array();

$arr4 = array_chunk($arr1,3);   //  将数组分割成 组成小数组,每三个数组元素代表一个小数组;

// 注意:此时省略了最后一个参数preserve keys = false参数,默认健名不受保护,即:每个chunk的小数组元素将从0开始索引(关联数组也是从0开始);

foreach($arr4 as $keys => $values){
	
	$arr3[$keys] = array_merge($values[0],$values[1],$values[2]);
	
}

print_r($arr3);



//  方法2: 利用 array_splice()函数和 array_merge()函数;

$arr3 = array();

while(0<count($arr1)){
	
	$temp = array_splice($arr1,0,3);
	$arr3[] = array_merge($temp[0],$temp[1],$temp[2]);  // 对数组的融合;
   
}

print_r($arr3);



//  方法3: 利用 foreach双层遍历后的健名和值,再结合count函数;


$arr3 = array();

foreach($arr1 as $keys => $values){
	
	foreach($values as $ks => $vs){
		
		$arr4[$ks] = $vs;
	}
	
	if(count($arr4)==3){
		
		$arr3[] = $arr4;
		$arr4 = array();
	}
}

print_r($arr3);



//  方法4: 利用 foreach双层遍历后的健名和值,再结合if语句;

$arr3 = array();

$i = 0;
$j = 0;
foreach($arr1 as $keys => $values){
	
	foreach($values as $ks => $vs){
		
		$arr3[$i][$ks] = $vs;
		$j++;
	}
	if($j%3==0){
		
		$i++;
	}
}

print_r($arr3);



//  方法4: 利用 foreach双层遍历后的健名和值,再结合if...else if语句;

$arr3 = array();

$i = 0;

foreach($arr1 as $key => $values){
	
	foreach($values as $ks => $vs){
		
		if($key==0){
			$arr3[$i][$ks]=$vs;
		}else if($key%3!=0){
			$arr3[$i][$ks] = $vs;
		}else{
			$i++;
			$arr3[$i][$ks] = $vs;
		}
		
	}
	
}

print_r($arr3);
// array_combine()构造函数的方法;(和array_merge函数一样,都是针对的数组的值进行的操作);
	
$i = $j = 0;
	
foreach($arr1 as $keys  => $values){
	
	foreach($values as $ks => $vs){
		
		$k[] = $ks;
		$v[] = $vs;
		$i++;
		
		if($i%3==0){
		
		  $arr3[$j] = array_combine($k,$v);
		  $k = $v = array();
		  $j++;
		}
	}
	
}
print_r($arr3);

2、php二维数组转化;

$arr1 = array(
			0 => array('confuguarable_sku' => '0572911','size' => 'XS'),
			1 => array('confuguarable_sku' => '0572911','size' => 'S'),
			2 => array('confuguarable_sku' => '0572911','size' => 'M'),
			3 => array('confuguarable_sku' => '0575213','size' => 25),
			4 => array('confuguarable_sku' => '0575213','size' => 26),
			5 => array('confuguarable_sku' => '0575213','size' => 25),
			6 => array('confuguarable_sku' => '0574843','size' => 28),
			7 => array('confuguarable_sku' => '0574843','size' => 30),
			8 => array('confuguarable_sku' => '0575494','size' => 'S')			 
			 );


//输出结果为

/*****

array(
	0 => array('confuguarable_sku' => '0572911','size' => 'XS','S','M'),
	1 => array('confuguarable_sku' => '0575213','size' => 25,26),
	2 => array('confuguarable_sku' => '0574843','size' => 28,30),
	3 => array('confuguarable_sku' => '0575494','size' => 'S')
	);			 

******/

$arr2 = $arrtemp = array();
	
foreach($arr1 as $keys => $values){
	
      $arrtemp[$values['confuguarable_sku']][] =  $values['size'];
	  
}	

foreach($arrtemp as $kss => $vss){
	
	$arr2[] = array('confuguarable_sku' => $kss,'size' => implode(',',array_unique($vss)));
	
}

print_r($arr2);
	

2、php二维数组整合并求和;

 $arr3=[
		 ['id'=>1,'name'=>'php','num'=>3],
		 ['id'=>2,'name'=>'js','num'=>1],
		 ['id'=>1,'name'=>'php','num'=>2],
		 ['id'=>3,'name'=>'python','num'=>2],
       ];
//怎么对id相同的对num求和并去重,返回的结果为;

 $arr=[
		 ['id'=>1,'name'=>'php','num'=>5],
		 ['id'=>2,'name'=>'js','num'=>1],
		 ['id'=>3,'name'=>'python','num'=>2],
      ];




$result = [];
foreach ($arr3 as $v) {
	
    if (isset($result[$v['id']])) {
        $result[$v['id']]['num'] += $v['num'];
    }
	
	/*******  用array_key_exists()函数:判断健名是否存在数组中;
	
	if(array_key_exists($v['id'],$result)){
		
		$result[$v['id']]['num'] += $v['num'];
		
	}
	
	*********/
	
    else {
        $result[$v['id']] = $v;
    }
}
print_r(array_values($result));
$arr5 = array(
			array('num'=>5,'period'=>3),
			array('num'=>10,'period'=>3),
			array('num'=>15,'period'=>9)
        );
	
// 对period相同的值的数组,对num求和,怎么处理变成:	


$arr6 = array(
			array('num'=>15,'period'=>3),
			array('num'=>15,'period'=>9)
        );
		
// 方法1:	找出数组中的相同值,用这个值作为新数组的健名(新数组的值如果之前没有相同值,即相同健名的时候,保持原数组;如果之前有相同的值,则对应的元素值相加);	

$arr2 = array();

foreach($arr5 as $keys => $values){
	
	if(array_key_exists($values['period'],$arr2)){
		
		$arr2[$values['period']]['num'] += $values['num'];
		
	}else{
		
		$arr2[$values['period']] = $values;
	}
	
}

//print_r(array_values($arr2));


// 方法2:将相同元素作为一个新临时数组健名,值还是一个数组(分别为原始数组中,需要相加值的各个元素),

$arr7 =  $temparr = array();
		
foreach($arr5 as $keys => $values){
	
	$temparr[$values['period']][] = $values['num'];
}

//print_r($temparr);


foreach($temparr as $ks => $vs){
	
	$arr7[] = array('num'=>array_sum($vs),'period'=>$ks);
	
}

//print_r($arr7);


// 方法3:以相同的元素作为一个新的健名,值为相同num内容的相加;


$result = $temp = array();

foreach($arr5 as $kks => $vvs){
	
	list($n,$p) = array_values($vvs);
	
	$temp[$p] = array_key_exists($p,$temp) ? ($temp[$p]+$n): $n;	
}

foreach($temp as $kkk => $vvv){
	
	$result[] = array('num' => $vvv,'period' => $kkk);
}

print_r($result);
$oldarr = [
				['a', 1],
				['', 2],
				['', 3],
				['b', 4],
				['', 5],
				['c',6],
				['',7]
          ];

/******  转换为

$newarr = [
			'a'=>'1,2,3',
			'b'=>'4,5',
			'c'=>'6,7'
          ];

********/

$arr2 = array();

foreach($oldarr as $keys => $values){
	
	if($values[0]){                        // 分别判读 第一个元素是 abc 还是 '';
		
		$abc = $values[0];                // 此时必须赋值,保持健名为abc;不然不执行条件判读语句的时候,直接用 $values[0] 则表示的是'';
		$arr2[$abc] = $values[1];
		continue;                        // continue;跳出这个循环,进入下一循环(循环内后面的语句则不再执行);
	}
	
	$arr2[$abc] .= ','.$values[1];
	
}

print_r($arr2);
$arr8 = Array(
		
			0 => Array('id' => 1,'department' => '市场' ),
			1 => Array('id' => 1,'department' => '市场' ),
			2 => Array('id' => 1,'department' => '市场' ),
			3 => Array('id' => 2,'department' => '办公室'),
			4 => Array('id' => 2,'department' => '办公室' ),
			5 => Array('id' => 2,'department' => '办公室' ),
			6 => Array('id' => 3,'department' => '收发室')
        );	
		
/******
循环后这样显示

id department  统计
1   市场         3
2  办公室        3
3  收发室        1

*******/

$arr9 = array();

foreach($arr8 as $keys => $values){
	
	if(isset($arr9[$values['id']])){
		
		$arr9[$values['id']]['count'] += 1;
	}else{
		
		$arr9[$values['id']] = $values;
		$arr9[$values['id']]['count'] = 1;
		
	}
}

foreach($arr9 as $kks => $vvs){
	
	echo 'id='.$vvs['id'].' department='.$vvs['department'].' 统计='.$vvs['count'];
	echo '<br/>';
}
$arr10 = Array(0 => Array('initial' => 'A','typename' => '奥迪'),
               1 => Array('initial' => 'F','typename' =>'F1'),
               2 => Array('initial' => 'F','typename' => 'F2')
               );
	
	
//怎么根据initial相同的分到同一个里面

/****

A{[0] => Array([initial] => A,[typename] => 奥迪)}

F{[0] => Array([initial] => F,[typename] =>F1),
  [1] => Array([initial] => F,[typename] => F2)
 }			

******/

$arr11 = array();

foreach($arr10 as $keys => $values){
	
	$arr11[$values['initial']][] = $values;
	
} 

print_r($arr11);

$arr8 = array(
			array('id'=>1,'name'=>'小明','time'=>'1'),
			array('id'=>1,'name'=>'小明','time'=>'2'),
			array('id'=>1,'name'=>'小明','time'=>'3'),
			array('id'=>2,'name'=>'小写','time'=>'4'),
			array('id'=>3,'name'=>'小明','time'=>'5'),
			array('id'=>2,'name'=>'小写','time'=>'6'),
			array('id'=>5,'name'=>'小明','time'=>'7'),
          );

//如何去除相同的id,保留第一个值,

//比如id=1的 保留 array('id'=>1,'name'=>'小明','time'=>'1'),其他相同的数组都删掉;


$arr9 = array();

foreach($arr8 as $keys => $values){
	
	if(array_key_exists($values['id'],$arr9)){
		
		continue;
	}
	
	$arr9[$values['id']] = $values;
}
//print_r($arr9);
$arr7 = array(
			array('user_id'=>1,'brand_id'=>'aaa','brand_name'=>'1'),
			array('user_id'=>1,'brand_id'=>'aaa','brand_name'=>'2'),
			array('user_id'=>1,'brand_id'=>'aaa','brand_name'=>'3'),
			array('user_id'=>2,'brand_id'=>'ddd','brand_name'=>'4'),
			array('user_id'=>3,'brand_id'=>'ddd','brand_name'=>'5')
           );
$newarr = array();

foreach($arr7 as $_arr){
	
    if(!isset($newarr[$_arr['user_id']])){
        $newarr[$_arr['user_id']] = $_arr;
    }
}
//print_r($newarr);
$a1=array('0' => array( "id" => '1', 'name'=>'aa' ),'1' => array( "id" => '2', 'name'=>'bb' ));

$a2=array('0' => array( "id" => '1', 'pwd'=>'888' ),'1' => array( "id" => '2', 'pwd'=>'999' ));

/******
合并成:
$a1_a2=array(

				'0' => array( "id" => '1', 'name'=>'aa' , 'pwd'=>'888' ),
				'1' => array( "id" => '2', 'name'=>'bb' , 'pwd'=>'999' ),
	
	        );
******/

$a1new = array();

$a2new = array();

$newarray = array();

foreach($a1 as $keys => $values){
	
	$a1new[$values['id']] = $values['name'];     //  array(1=>'aa',2=>'bb');
	
}

foreach($a2 as $keys => $values){
	
	$a2new[$values['id']] = $values['pwd'];      // array(1=>'888',2=>'999');
	
}

foreach($a1new as $keys => $values){
	
	$newarray[] = array('id'=>$keys,'name'=>$values,'pwd'=>isset($a2new[$keys])? $a2new[$keys]:'');
}

print_r($newarray);

3、php二维数组排序;

//假如有以下数组:

$beforeSort = [
				"0"  => ["name" => "张三", "english" => 80, "chinese" => 60, "math" => 50 ],
				"1"  => ["name" => "李四", "english" => 50, "chinese" => 60, "math" => 70 ],
				"2"  => ["name" => "老王", "english" => 30, "chinese" => 50, "math" => 80 ],
              ];

// 现在需要在数组中按照 chinese 顺序,假如有相同,就按 math 顺序,最后得到的应该是如下的数组:

$afterSort = [
				"2"  => ["name" => "老王", "english" => 30, "chinese" => 50, "math" => 80 ],
				"0"  => ["name" => "张三", "english" => 80, "chinese" => 60, "math" => 50 ],
				"1"  => ["name" => "李四", "english" => 50, "chinese" => 60, "math" => 70 ],
             ];

// 方法1:利用 array_multisort 函数;			 
			 
$chinese = $math = array();			 
	
foreach($beforeSort as $keys => $values){
	
	$chinese[$keys] = $values['chinese'];     // $chinese = array(0=>60,1=>60,2=>50);
	//  等价于:
	//$chinese = array_column($beforeSort,'chinese');
	
	$math[$keys] = $values['math'];          //  $math = array(0=>60,1=>70,2=>80);
	//  等价于:
	//$math = array_column($beforeSort,'math');
}

array_multisort($chinese,SORT_ASC,$math,SORT_ASC,$beforeSort);  // 对$beforeSort数组进行排序,先按照$chinese的升序,再按照$math的升序;

print_r($beforeSort);


// 方法2: 利用usort函数;
// 注意:在第一个参数小于,等于或大于第二个参数时,该比较函数必须相应地返回一个小于,等于或大于 0 的整数;

function myfun1($a,$b){  
      
    if($a['chinese'] == $b['chinese'] ){  
          
        return 0;     
    }  
      
    return ($a['chinese'] > $b['chinese']) ? 1 : -1;    
}  

function myfun2($a,$b){  
      
    if($a['math'] == $b['math'] ){  
          
        return 0;     
    }  
      
    return ($a['math'] < $b['math']) ? 1 : -1;    
} 
  
usort($beforeSort,'myfun1');     // 满足了 > (1) 条件,所以chinese 从小到大排序;
  
usort($beforeSort,'myfun2');    // 不满足 (<) (-1) 的条件,所以 math 从大到小排序;(在第一次排序的基础上);

print_r($beforeSort);

4、php二维数组去重;

$arr4=array(1=>array('a','b'),
           2=>array('a','c'),
		   3=>array('a','b')); 

//只输出第一项(第一项和第三项相同,去第三项)和第二项这个怎么解决?
				
foreach($arr4 as $keys => $values){
	
	$arr5[$keys] = implode(' ',$values);
	
}

$arr5 = array_unique($arr5);

foreach($arr5 as $ks => $vs){
	
	$arr6[$ks] = explode(' ',$vs);
	
}
print_r($arr6);
$tid='1,2,2,4,4,5';

//变为$tid='1,2,4,5';

$arr = explode(',',$tid);

echo implode(',',array_unique($arr));



www.phpzy.comtrue/php/4783.htmlTechArticlephp数组相关转化、函数练习,php数组转化函数 $arr1=array( 0 = Array('子题目' = '11'), 1 = Array('答案' = 'ada'), 2 = Array('解析' = '3a'), 3 = Array('子题目' = '121'), 4 = Array('答案' = 'aa'), 5 = Array('解析'...

相关文章

    暂无相关文章
相关频道:

PHP之友评论

今天推荐