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;
}