0

我需要帮助!

我有一个这样的数组,但我不知道如何为多维数组爆炸:

array() {
  ["id"]=>
  string(1) "1"
  ["offer_id"]=>
  string(3) "123"
  ["product_id"]=>
  string(3) "123"
  ["product_x"]=>
  string(3) "123"
  ["product_x_t"]=>
  string(3) "123"
  ["product_x_z"]=>
  string(3) "123"
  ["product_x_z_a"]=>
  string(3) "123"

}

并希望这样:

array(){
  ["id"]=>
  string(1) "1"
  ["offer"]=>
  string(3) "123"
     ["id"]=>
     string(3) "123"
  ["product"]=>
  string(3) "123"
      ["id"]=>
      string(3) "123"
      ["x"]=>
      string(3) "123"
          ["t"]=>
          string(3) "123"
          ["z"]=>
          string(3) "123"
              ["a"]=>
              string(3) "123"

但我真的没有任何想法!

4

3 回答 3

2

实际上,你不能那样做。值不能同时是字符串和数组。

$value['product']['x'] = "123";
$value['product']['x'] = array('t'=>'some_value', 'z' => 'some_value');
于 2013-10-17T00:08:53.453 回答
0

好的,我明白了...实际上它不是递归的,但我认为不会有那么多情况...

function plode($val) {
    $arr = array();
        foreach($val as $key => $valval) {
            $po = explode("_", $key);
            $co = count($po);

            switch($co){
                case 1:
                    $arr[$key] = $valval;
                    break;
                case 2:
                    $arr[$po[0]][$po[1]] = $valval;
                    break;
                case 3:
                    $arr[$po[0]][$po[1]][$po[2]] = $valval;
                    break;
                case 4:
                    $arr[$po[0]][$po[1]][$po[2]][$po[3]] = $valval;
                    break;
                case 5:
                    $arr[$po[0]][$po[1]][$po[2]][$po[3]][$po[4]] = $valval;
                    break;
                case 6:
                    $arr[$po[0]][$po[1]][$po[2]][$po[3]][$po[4]][$po[5]] = $valval;
                    break;
                case 7:
                    $arr[$po[0]][$po[1]][$po[2]][$po[3]][$po[4]][$po[5]][$po[6]] = $valval;
                    break;
            }
        }

        return $arr;

}

数组的结果,如 array("values_sale_rent_x_y_z_j" => 100, ...)

array(8) {
  ["id"]=>
  string(1) "1"
  ["offer"]=>
  array(1) {
    ["id"]=>
    string(3) "123"
  }
  ["product"]=>
  array(1) {
    ["id"]=>
    string(3) "123"
  }
  ["selected"]=>
  string(1) "1"
  ["active"]=>
  string(1) "1"
  ["amount"]=>
  string(3) "123"
  ["payments"]=>
  string(4) "sale"
  ["values"]=>
  array(1) {
    ["rent"]=>
    array(1) {
      ["min"]=>
      array(2) {
        ["discount"]=>
        string(1) "0"
        ["default"]=>
        string(1) "0"
      }
    }
  }
}
于 2013-10-17T08:41:49.523 回答
0

最后:

function plode($val, $bool = false, $deli='_') {
        $arr = array();
        foreach($val as $key => $valval) {
            $po = explode($deli, $key);
            $co = count($po);

            switch($co){
                case 1:
                    $arr[$key] = $valval;
                    break;
                case 2:
                    $arr[$po[0]][$po[1]] = $valval;
                    break;
                case 3:
                    $arr[$po[0]][$po[1]][$po[2]] = $valval;
                    break;
                case 4:
                    $arr[$po[0]][$po[1]][$po[2]][$po[3]] = $valval;
                    break;
                case 5:
                    $arr[$po[0]][$po[1]][$po[2]][$po[3]][$po[4]] = $valval;
                    break;
                case 6:
                    $arr[$po[0]][$po[1]][$po[2]][$po[3]][$po[4]][$po[5]] = $valval;
                    break;
                case 7:
                    $arr[$po[0]][$po[1]][$po[2]][$po[3]][$po[4]][$po[5]][$po[6]] = $valval;
                    break;
                case 8:
                    $arr[$po[0]][$po[1]][$po[2]][$po[3]][$po[4]][$po[5]][$po[6]][$po[7]] = $valval;
                    break;
                case 9:
                    $arr[$po[0]][$po[1]][$po[2]][$po[3]][$po[4]][$po[5]][$po[6]][$po[7]][$po[8]] = $valval;
                    break;
                case 10:
                    $arr[$po[0]][$po[1]][$po[2]][$po[3]][$po[4]][$po[5]][$po[6]][$po[7]][$po[8]][$po[9]] = $valval;
                    break;
            }
        }
        if($bool) return json_decode(json_encode($arr));
        else return $arr;


     }
于 2013-10-17T08:56:13.090 回答