Php 将子数组移动到父数组并更改父/子名称
我知道之前可能有人问过这个问题,不确定是否在这个表格中,但我确实尝试了一些重播,从我在这里找到的关于这个的内容,但失败了 好的,我有这个数组Php 将子数组移动到父数组并更改父/子名称,php,arrays,cakephp,foreach,Php,Arrays,Cakephp,Foreach,我知道之前可能有人问过这个问题,不确定是否在这个表格中,但我确实尝试了一些重播,从我在这里找到的关于这个的内容,但失败了 好的,我有这个数组 Array ( [0] => Array ( [Data3] => Array ( [id] => 5 [category] => Whiskey
Array
(
[0] => Array
(
[Data3] => Array
(
[id] => 5
[category] => Whiskey
[name] => Some name
[description] => description
[image] => asdf.jpg
[price] => 83.99
)
[ammount] => 1
[Data_id] => 3
)
[1] => Array
(
[Data3] => Array
(
[id] => 4
[category] => Tequila
[name] => Something Red 75cl
[description] => description
[image] => sierratequilasilver100.jpg
[price] => 92.49
)
[ammount] => 2
[Data_id] => 3
)
[2] => Array
(
[Data4] => Array
(
[id] => 3
[category] => Whiskey
[name] => Some name Gold
[description] => description
[image] => asdf.jpg
[price] => 83.99
)
[ammount] => 1
[Data_id] => 4
)
[3] => Array
(
[Data4] => Array
(
[id] => 5
[category] => Vodka
[name] => Something Blue 100 cl
[description] => description
[image] => Something.jpg
[price] => 32.44
)
[ammount] => 1
[Data_id] => 4
)
)
我想要的结果是这样的:
Array
(
[0] => Array
(
[id] => 5
[category] => Whiskey
[name] => Some name
[description] => description
[image] => asdf.jpg
[price] => 83.99
[ammount] => 1
[Data_id] => 3
)
[1] => Array
(
[id] => 4
[category] => Tequila
[name] => Something Red 75cl
[description] => description
[image] => sierratequilasilver100.jpg
[price] => 92.49
[ammount] => 2
[Data_id] => 3
)
[2] => Array
(
[id] => 3
[category] => Whiskey
[name] => Some name Gold
[description] => description
[image] => asdf.jpg
[price] => 83.99
[ammount] => 1
[Data_id] => 4
)
[3] => Array
(
[id] => 5
[category] => Vodka
[name] => Something Blue 100 cl
[description] => description
[image] => Something.jpg
[price] => 32.44
[ammount] => 1
[Data_id] => 4
)
)
或者我可以使用的另一种方法是,如果我可以更改数据1、数据2、数据3等等
数据可以是n,这取决于用户选择的产品数量
输入相同的名称,例如简单的数据或信息
例:
任何解决办法都可以
感谢并问候您的第一个选择:
foreach($arr as $key => $value){
foreach($value as $k => $val){
if(is_array($val)){
$arr[$key] = $val;
unset($arr[$key][$k]);
}
}
}
echo "<pre>"; print_r($arr);
foreach($arr as$key=>$value){
foreach($k=>$val){
如果(是_数组($val)){
$arr[$key]=$val;
未设置($arr[$key][$k]);
}
}
}
回声“;印刷费($arr);
将此代码用于您的结果:
$aStartArray = array(array('Data3'=>array('id'=>1, 'cat'=>2), 'amount' => 1, 'Data_id'=>3));
foreach ($aStartArray as $iPos => $aArray) {
$aKeys = array_keys($aArray); // fetches all the keys
$aFirstElement = $aArray[$aKeys[0]]; // Get the first element using first key
// assign/ overwrite data at the same position
$aStartArray[$iPos] = array($aFirstElement, 'amount' => $aArray['amount'], 'Data_id' => $aArray['Data_id']);
}
echo "<pre>";
var_dump($aStartArray);
我会这样做的。不过,我希望首先解决数据为何位于该结构中的问题
$aStartArray=array(array('Data3'=>array('id'=>1,'cat'=>2),'amount'=>1,'Data_id'=>3));
foreach($Astartaray作为$IPO=>$aArray){
$aKeys=array\u keys($aArray);//获取所有键
$aFirstElement=$aArray[$aKeys[0]];//使用第一个键获取第一个元素
//在同一位置分配/覆盖数据
$astarray[$iPos]=数组($aFirstElement,'amount'=>$aArray['amount'],'Data\u id'=>$aArray['Data\u id']);
}
回声“;
var_dump($Astartaray);
为什么数据要存储在该结构中?如果您正在构建阵列,您可以在此时执行此操作,因为这样会阻止您重新构建阵列。数据就在那里,因为每个阵列都是来自不同表的sql请求。ex data3来自表3等等。然后您需要更改sql以便它正确检索所有信息。看看SQL连接。如果这里的任何答案解决了您的问题,请标记为正确,如果需要,请打开一个新问题。在我的示例中,这项工作可以完成,但我的变量是动态的。非常感谢。例如,工作正常,但经过一些测试后,它不会显示我的数量和更多值的数据id。
$final_array = array();
foreach($array1 as $offset1 => $array2) {
$tmp_array = array();
foreach($array2 as $offset2 => $array3) {
if(is_array($array3)) {
$tmp_array = $array3;
} else {
$tmp_array[$offset2] = $array3
}
}
$final_array = array_merge($final_array, $tmp_array;);
//or
$final_array[] = $tmp_array;
}
$aStartArray = array(array('Data3'=>array('id'=>1, 'cat'=>2), 'amount' => 1, 'Data_id'=>3));
foreach ($aStartArray as $iPos => $aArray) {
$aKeys = array_keys($aArray); // fetches all the keys
$aFirstElement = $aArray[$aKeys[0]]; // Get the first element using first key
// assign/ overwrite data at the same position
$aStartArray[$iPos] = array($aFirstElement, 'amount' => $aArray['amount'], 'Data_id' => $aArray['Data_id']);
}
echo "<pre>";
var_dump($aStartArray);