Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 多维数组的表下划线分解_Php_Arrays - Fatal编程技术网

Php 多维数组的表下划线分解

Php 多维数组的表下划线分解,php,arrays,Php,Arrays,我需要帮助 我有一个这样的数组,但我不知道如何为多维数组爆炸: 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"]=&g

我需要帮助

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

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"

但是我真的不知道

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

$value['product']['x'] = "123";
$value['product']['x'] = array('t'=>'some_value', 'z' => 'some_value');

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

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;

}
类aray数组的结果(“value_sale_rent_x_y_z_j”=>100,…)

最终:


你能展示你想要的代码吗?因为您显示的是控制台输出,而不是实际的PHP。您的第一个块将是
array(“id”=>1,“offer\u id=>123,…)
例如。另外,请转到php.net,通过搜索数组函数的文档来查找如何执行此操作。阅读它们,尝试它们,当您最终用尽所有选项时,在此处提问。我们很乐意提供帮助,但如果您没有先完成自己的研究,则不会。我们是最后的选择,而不是第一个。您至少尝试过吗d什么?它不必工作,甚至不必很接近,但我怀疑如果你不发布它,你会被遗忘。newArray['product']中应该存储什么?从你的示例中,它应该是字符串和数组使用
foreach()
分解
键,生成一个递归函数,从该键数组中取消移动项,并将其设置为通过引用传递的数组。
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"
      }
    }
  }
}
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;


     }