For example:array('C', 'B', 'A', 'D', 'E');
array('good' => 'C', 'B', 'oh' => 'A', 'D', 'do' => 'E');要掉换C 和 A 整个健-值对的位置, 现在我用替换法实现的, 有内置函数一步实现这功能吗?如 
array_exchange($key1,  $key2,  $subject) ;
array_exchange('A', 'B',  $subject) 
array_exchange('good',  'oh',  $subject) 结果
array('A', 'B', 'C', 'D', 'E');
array( 'oh' => 'A',  'B','good' => 'C', 'D', 'do' => 'E');

解决方案 »

  1.   

    感觉像是对数组用自然排序法排序:
    PHP natcasesort() 函数PHP Array 函数
    定义和用法natcasesort() 函数用不区分大小写的自然顺序算法对给定数组中的元素排序。natcasesort() 函数实现了“自然排序”,即数字从 1 到 9 的排序方法,字母从 a 到 z 的排序方法,短者优先,该函数不区分大小写。数组的索引与单元值保持关联。如果成功,则该函数返回 TRUE,否则返回 FALSE。
    语法natcasesort(array)参数  描述
    array  必需。规定要进行排序的数组。
    提示和注释提示:natcasesort() 是 natsort() 函数 的不区分大小写字母的版本。
    例子<?php
    $temp_files = array("temp15.txt","Temp10.txt",
    "temp1.txt","Temp22.txt","temp2.txt");natsort($temp_files);
    echo "Natural order: ";
    print_r($temp_files);
    echo "<br />";natcasesort($temp_files);
    echo "Natural order case insensitve: ";
    print_r($temp_files);
    ?>输出:Natural order:
    Array
    (
    [0] => Temp10.txt
    [1] => Temp22.txt
    [2] => temp1.txt
    [4] => temp2.txt
    [3] => temp15.txt
    )Natural order case insensitve:
    Array
    (
    [2] => temp1.txt
    [4] => temp2.txt
    [0] => Temp10.txt
    [3] => temp15.txt
    [1] => Temp22.txt
    )
      

  2.   

    其实也可以用排序的思路来做了
    1,首先按照值 用自然排序法的方式进行排序
    2,排序完成后遍历原来没有排序的数组,用inarray判断并重写键名就好了.
    如果你认为我的思路不好,你就看看所有的array操作函数吧,或许对你有帮助
    http://www.w3school.com.cn/php/php_ref_array.asp
      

  3.   

    那是LZ为了使结果看的清楚些php 没有这样的函数
    php 的数组并不是严格意义上的数组,他只是个散列表
    所以楼主的需求并无什么必要
      

  4.   

    我也是搞不清楚他为什么这样做刚开始眼花,以为要交换两个值,看清楚后就不明白了难道foreach的时候,排在前面的值会影响后面的计算?
      

  5.   


    OK,  唠叨所说, 一楼我这样故意假设按顺序去排序是为让大家明白我的目的, 
    但有些异义, 我的需求并不是要排序, 再看另一个数组,
    array(
     'preprocess' => 'user_check', 
     'footer'   => 'web_footer',
     'left'   => 'navigation_bar',
     'centre'   => array('content_container', 'subject_list'),
     'header'   => 'top_menu',
     'finish'   => 'free',
    //something more ...
    //...
    );//这个数组, 现在我要掉换header和footer二项,
     //它们并没有排序的必要, 也没必要重打造一个数组//大家认为呢 。。
      

  6.   

    糊涂了.顶楼的array_exchange前两个参数是下标,也可以是元素值?
    我看例子,LZ要的就是数组的顺序吧??【不是指排序】============
    如果没理解错
    曾经试图用类似方法,php中模拟维护一个链表,但是没有找到方法……,缺乏专研精神,果断放弃了
      

  7.   

    猜测你的 array_exchange 函数的实现
    function array_exchange($arg1, $arg2, $arr){   
       $k = array_keys($arr);
       $v = array_values($arr);
       $arg1 = array_search($arg1, $k);
       $arg2 = array_search($arg2, $k);
       list($k[$arg2], $k[$arg1]) = array($k[$arg1], $k[$arg2]);
       list($v[$arg2], $v[$arg1]) = array($v[$arg1], $v[$arg2]);
       return array_combine($k, $v);
    }   
      

  8.   

    //不考虑值为多维数组, 和相同下, 我这么写,
    function array_exchange($key1, $key2, $arr) { $val1 = $arr[$key1];
    $val2 = $arr[$key2];
    $trans = array_flip($arr);  //反转, 换健
    $trans[$val1] = $key2;
    $trans[$val2] = $key1;
    $arr = array_flip($trans);  //反转, 换值
    $arr[$key1] = $val1;
      $arr[$key2] = $val2;
    return $arr;
    }
      

  9.   

    另外,
    array_exchange是数组置换的意思,
    不是array_sort, 也不是array_order怎么有人理解成排序, 费解。