我在代码里的得到一个数组如下:
1 2 3 4 5 6 7(键名)
-----------------------------------------------------------------------
a 50 60 long zzz kkk ooo
b 60 70 king lll ttt ppp
c 70 80 quit qqq xxx ccc
------------------------------------------------------------------------
我想取出2,3,4,5,6这五列建立新的数组,并且新的数组用字符串作为键名
如下:
StaffId Wage Name Work Type
-----------------------------------------------------------------
50 60 long zzz kkk
60 70 king lll ttt
70 80 quit qqq xxx
-----------------------------------------------------------------
请问有什么好的方法?初学PHP,对二维数组并不是很懂,请教各位了。

解决方案 »

  1.   

     将数组 var_export 出来。 我看不懂你的数组是什么结构
      

  2.   

    array_slice($arr,1,-1);截取出来再改键名
      

  3.   

    用什么方法改键名呢?好像PHP的数组键名很难改啊。array_combine()好像只对一维数组有用。
      

  4.   

    $ar = array(1 => 'a', 2 => 50, 3 => 60, 4 => 'long', 5 => 'zzz', 6 => 'kkk', 7 => 'ooo');
    $kname = array('StaffId', 'Wage', 'Name', 'Work', 'Type');
    $r = array_combine($kname, array_slice($ar, 1, -1));
    print_r($r);Array ( [StaffId] => 50 [Wage] => 60 [Name] => long [Work] => zzz [Type] => kkk )以此类推
      

  5.   

    完整的写法$ar = array(
      array(1 => 'a', 2 => 50, 3 => 60, 4 => 'long', 5 => 'zzz', 6 => 'kkk', 7 => 'ooo'),
      array(1 => 'b', 2 => 60, 3 => 70, 4 => 'king', 5 => 'lll', 6 => 'ttt', 7 => 'ppp'),
      array(1 => 'c', 2 => 70, 3 => 80, 4 => 'quit', 5 => 'qqq', 6 => 'xxx', 7 => 'ccc'),
    );
    $kname = array('StaffId', 'Wage', 'Name', 'Work', 'Type');function foo(&$v, $k, $kname) {
      $v = array_combine($kname, array_slice($v, 1, -1));
    }array_walk($ar, 'foo', $kname);
    print_r($ar);Array
    (
        [0] => Array
            (
                [StaffId] => 50
                [Wage] => 60
                [Name] => long
                [Work] => zzz
                [Type] => kkk
            )    [1] => Array
            (
                [StaffId] => 60
                [Wage] => 70
                [Name] => king
                [Work] => lll
                [Type] => ttt
            )    [2] => Array
            (
                [StaffId] => 70
                [Wage] => 80
                [Name] => quit
                [Work] => qqq
                [Type] => xxx
            ))
      

  6.   

    我的代码写在ProcessMaker的Trigger里面,似乎不支持。在Debug里面看不到新数组有值。蛋疼。。
      

  7.   

    Trigger 触发器?那当然是不行的,这是 php 的代码
    怎么能在数据库里使用呢?数据库里没有数组的概念,“我在代码里的得到一个数组”你的这种问法不就产生误解了?
      

  8.   

    其实使用ProcessMaker这个工作流软件,我开始学的时候,别人叫我的Trigger 里面写的是PHP语言,通常简单的Php代码都支持。里面也有些ProcessMaker自己的规范,函数。我学了半年,晕头转向。
    这边我说的Trigger可能和您说的不一样。一般数组在这里创建,传递给Grid显示到页面。(很多时候用的是ProcessMaker自带的东西,所以之前没接触过PHP的我来说,已经将他们混在一起,一团浆糊。)
    下面有段是Trigger的代码,感兴趣的可以看看:Displaying a List of Cases in a Grid@=casesGrid = array();
    $userId = @@USER_LOGGED;
    $q = "SELECT APP_UID, DEL_INDEX FROM APP_DELEGATION WHERE USR_UID='$userId' and DEL_THREAD_STATUS='OPEN'";
    $cases = executeQuery($q);
    if (is_array($cases) and count($cases) > 0) {
       for ($i = 1; $i <= count($cases); $i++) {
          $caseId = $case[$i]['APP_UID'];
          $caseIndex = $case[$i]['DEL_INDEX'];
          $oCase = new Cases();
          $aCaseInfo = $oCase->loadCase($caseId, $caseIndex);
          //look up the Task Name and Process Name:
          $lang = @@SYS_LANG;
          $result = executeQuery("SELECT CON_VALUE FROM CONTENT WHERE CON_ID = '{$aCaseInfo['PRO_UID'] AND
             'CON_CATEGORY='PRO_TITLE' AND CON_LANG='$lang'");
          $processName = $result[1]['CON_VALUE'];
          $result = executeQuery("SELECT CON_VALUE FROM CONTENT WHERE CON_ID = '{$aCaseInfo['TAS_UID'] AND
             'CON_CATEGORY='TAS_TITLE' AND CON_LANG='$lang'");
          $taskName = $result[1]['CON_VALUE'];
          @=casesGrid[$i] = array(
             "caseNumber" => $aCaseInfo['APP_NUMBER'],
             "processName" => $processName ,
             "taskName" =>  $taskName,
             "dueDate" =>  $aCaseInfo['DEL_TASK_DUE_DATE'],
             "linkToCase" => '',
             "urlForCase" => "../cases/cases_Open?APP_UID=$caseId&DEL_INDEX=$caseIndex",
             "labelForCase" => $aCaseInfo['APP_TITLE']
          );
       }
       @=casesGrid = orderGrid(@=casesGrid, 'dueDate', 'DESC');
    }