php将数组中某个元素置顶设为第一个元素

一个数组$a0有N个元素,要将其中第3个元素,排在数组的首位。

第一种做法是:

取出第3个元素,赋值给变量$a

unset 第3个元素

array_unshift 将$a添加到数组头部。

如果是数字下标的数组,这样是可以的。可如果是字符串做为下标,array_unshift会破坏下标,都变成了数字,以0开始计数。

解决方案为:

取出第3个元素,定义成一个单一数组 $a1

unset第3个元素,更新数组$a0

array_merge($a1,$a0)。

使用 array_merge 不会破坏数组下标。

示例:

<?php
$array1 = array (
  0 =>
  array (
    ‘top‘ => ‘true‘,
    ‘path‘ => ‘cPath=9‘,
    ‘current‘ => false,
    ‘name‘ => ‘Women‘,
    ‘image‘ => NULL,
    ‘has_sub_cat‘ => true,
  ),
  1 =>
  array (
    ‘top‘ => ‘true‘,
    ‘path‘ => ‘cPath=10‘,
    ‘current‘ => false,
    ‘name‘ => ‘Men‘,
    ‘image‘ => NULL,
    ‘has_sub_cat‘ => false,
  ),
  2 =>
  array (
    ‘top‘ => ‘true‘,
    ‘path‘ => ‘cPath=1‘,
    ‘current‘ => false,
    ‘name‘ => ‘Accessories‘,
    ‘image‘ => ‘‘,
    ‘has_sub_cat‘ => false,
  ),
  3 =>
  array (
    ‘top‘ => ‘true‘,
    ‘path‘ => ‘cPath=2‘,
    ‘current‘ => false,
    ‘name‘ => ‘New Arrival‘,
    ‘image‘ => ‘‘,
    ‘has_sub_cat‘ => false,
  ),
  4 =>
  array (
    ‘top‘ => ‘true‘,
    ‘path‘ => ‘cPath=4‘,
    ‘current‘ => true,
    ‘name‘ => ‘Styles‘,
    ‘image‘ => ‘‘,
    ‘has_sub_cat‘ => true,
  ),
  5 =>
  array (
    ‘top‘ => ‘false‘,
    ‘path‘ => ‘cPath=4_5‘,
    ‘current‘ => false,
    ‘name‘ => ‘Basketball Shoes‘,
    ‘image‘ => ‘‘,
    ‘has_sub_cat‘ => false,
  ),
  6 =>
  array (
    ‘top‘ => ‘false‘,
    ‘path‘ => ‘cPath=4_6‘,
    ‘current‘ => false,
    ‘name‘ => ‘Football Shoes‘,
    ‘image‘ => ‘‘,
    ‘has_sub_cat‘ => false,
  ),
  7 =>
  array (
    ‘top‘ => ‘false‘,
    ‘path‘ => ‘cPath=4_7‘,
    ‘current‘ => true,
    ‘name‘ => ‘Tennis Shoes‘,
    ‘image‘ => ‘‘,
    ‘has_sub_cat‘ => false,
  )
);
var_export($array1);
echo "<br /><br /><br />\n\r";

$temp_array = array();
global $temp_array,$rootcid;
foreach($array1 as $k=>$v){
    if($v[‘current‘] == true){
        $rootcids = explode(‘_‘, str_replace(‘cPath=‘, ‘‘, $v[‘path‘]));
        $rootcid = $rootcids[0];
        break;
    }
}

foreach($array1 as $k=>$v){
    $ifrootcid = explode(‘_‘, str_replace(‘cPath=‘, ‘‘, $v[‘path‘]));
    if($rootcid==$ifrootcid[0]){
        $temp_array[] = $v;
        unset($array1[$k]);
    }
}
//$array1 = array_values($array1);
var_export($array1);
echo "<br /><br /><br />\n\r";
//var_export($temp_array);
$array1 = array_merge($temp_array, $array1);
var_export($array1);
?>

打完收工。

时间: 2024-10-13 09:37:22

php将数组中某个元素置顶设为第一个元素的相关文章

C语言:对传入sp的字符进行统计,三组两个相连字母“ea”&quot;ou&quot;&quot;iu&quot;出现的次数,并将统计结果存入ct所指的数组中。-在数组中找出最小值,并与第一个元素交换位置。

//对传入sp的字符进行统计,三组两个相连字母“ea”"ou""iu"出现的次数,并将统计结果存入ct所指的数组中. 1 #include <stdio.h> 2 #include <string.h> 3 #pragma warning (disable:4996) 4 void fun(char*sp ,int *ct) 5 { 6 int a=0, b=0, c=0; 7 while (*sp != '\0') 8 { 9 if (*s

C++实现数组中出现最频繁的前top k个元素

要求: 时间复杂度小于等于 nlogn. 算法解题思路: 1, 由于原始数组是杂乱无序的, 所以 统计数组中元素出现的次数时间复杂度达到了n^2, 不符合题意. 2, 在统计数组中的元素出现次数之前, 先对数组进行排序, 用时间复杂度是 nlogn的排序算法进行排序,  在这里用C++ 中函数库STL中的sort直接排序, 关于STL中sort实现(成熟的快速排序算法, 结合了内插排序,具体读读STL中实现). 3. 从排好序的第一个元素开始扫描,  统计每个元素出现的次数,时间复杂度为n. 4

js数组移动上移下移置顶置底,vue实现表格上下移动置底置顶

js操作数组移动 //先封装js数组交换顺序方法 /*参数说明 arr是要操作的数组 index1 是准备移动的元素 index2 是准备移动到的位置 往下移就是 index2=index+1 往上移动就是 index2=index+1: 这个也可以在页面试试那个方法就指导了,但是置顶和置底还有点差别 */ var swapItems = function(arr, index1, index2,direction) { if(direction=='up'){//置顶 arr.unshift(

设置td中的table置顶

style="vertical-align: top" <td colspan="11" rowspan="5" style="vertical-align: top"> <table class="formTable"> <tr> <td colspan="2" >序号</td> 不然图片红色部分,会在中间 原文地址:http

编程之美 - 写一个函数,返回数组中所有元素被第一个元素除的结果

问题: 写一个函数,返回数组中所有元素被第一个元素除的结果,包含第一个元素,也要自己除自己 分析: 主要注意两点:1,判断输入是否合法:2,判断除数是否为0:3,从后往前除(真猥琐) 代码实现: 1 /* div_array.cc 2 * 2014/09/03 create 3 * 写一个函数,返回数组中所有元素被第一个元素除的结果,包含第一个元素,也要自己除自己 4 */ 5 #include <iostream> 6 using namespace std; 7 8 void div_ar

算法之找出数组中出现次数大于n/m的元素

最经典的题目莫过于是: 在一个数组中找出出现次数超过n/2的元素?更进一步的,找出数组中出现次数大于n/3的所有元素? 注:这里有一个很重要的事实,那就是出现次数大于n/m的元素的个数至多为(m-1)个,比如出现次数大于n/3的至多只有两个. 关于这一类题目的解题思路,可以先讲一个游戏 称作 "俄罗斯方块".这里的规则是每一行的元素要完全不一样,一样的元素则总是在同一列,如果最下面的行已经被填满,那么消除最下面的行. 例如在数组 A = {7,3,3,7,4,3,4,7,3,4,3,4

[编程之美]写一个函数,返回一个数组中所有元素被第一个元素除的结果

题目: 写一个函数,返回一个数组中所有元素被第一个元素除的结果: 错误的版本: void DivArray(int *array, int n) { for (int i = 0; i < n; ++i) { array[i] /= array[0]; } } 错误原因:在循环的第一步,第一个元素就变成了1,然后再用它去除以其他元素,就不符合题目要求了 改进: 1:使用其他变量保存第一个元素: void DivArray3(int *array, int n) { assert(array !=

C++_第七章函数的基本知识_求阶乘的子函数_ 函数参数类型为数组_ 求数组内所有元素和、部分元素和的方法_实现了先从键盘输入到一个数组中,再用for循环取读出数组中的元素 for循环也可以用break来结束循环的

/* 第七章函数的基本知识 */ /*01)c++对于返回值有一定的限制:可以是常量.变量.指针.结构对象或表达式,但不可以是数组02)c++返回数组的方法:将数组作为结构会对象组成部分来返回03)函数遇到return则结束该函数04)如果一个函数的两房额参数类型相同,则必须分别制定每个参数的类型,而不能像声明常规变量那样,将声明组合在一起05)*/ //本代码注意double类型的写法以及double和int类型数据的转换 1 #include <iostream> 2 3 void che

数组中元素的排序(常用的冒泡排序、选择排序、快速排序)

1.冒泡排序(以从小到大为例) [分析]:冒泡排序的思想就是,两两进行比较,第一个元素和第二个元素进行比较,如果第一个元素比第二个元素大,则这两个元素交换位置,然后第二个元素和第三个元素进行比较,如果第二个元素比第三个元素大,交换位置,依次类推,知道到最后一个元素.在比较的时候,每进行一轮比较,就可以找到当前这一轮的最大值, 我们可以将每一轮找到的最大值放到最后,知道最终剩下两个值,比较完之后,就可以将当前数列的数据按照从小到大的顺序排列好. 以:a=[  2 ,  6  ,8  ,9  ,1