按内部索引排列PHP多维数组
如何按最后一个内部索引(0、1、2)排列此数组,并将最后一个内部索引的值作为每个第二个索引的值:按内部索引排列PHP多维数组,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,如何按最后一个内部索引(0、1、2)排列此数组,并将最后一个内部索引的值作为每个第二个索引的值: Array ( [text] => Array ( [grid] => Array ( [0] => 3 [1] => 4 [2] => 5
Array
(
[text] => Array
(
[grid] => Array
(
[0] => 3
[1] => 4
[2] => 5
)
[image] => Array
(
[0] =>
[1] =>
[2] =>
)
[align] => Array
(
[0] => left
[1] => right
[2] => left
)
[title] => Array
(
[0] =>
[1] =>
[2] =>
)
[content] => Array
(
[0] =>
[1] =>
[2] =>
)
)
)
结果如下:
Array
(
[text] => Array
(
[0] => Array
(
[grid] => 3
[image] =>
[align] => left
[title] =>
[content] =>
)
[1] => Array
(
[grid] => 4
[image] =>
[align] => right
[title] =>
[content] =>
)
[2] => Array
(
[grid] => 5
[image] =>
[align] => left
[title] =>
[content] =>
)
)
)
这应该行得通
function formatit($arr) {
$new = array();
foreach($arr as $k=>$v) {
foreach($v as $k1=>$v1) {
$new[$k1][$k] = $v1;
}
}
return $new;
}
测试。称之为
$arr['text'] = formatit($arr['text']);
这应该行得通
function formatit($arr) {
$new = array();
foreach($arr as $k=>$v) {
foreach($v as $k1=>$v1) {
$new[$k1][$k] = $v1;
}
}
return $new;
}
测试。称之为
$arr['text'] = formatit($arr['text']);
正如Sigateng所建议的,除了为/foreach循环使用
之外,我看不到其他方法:
function buildArray($source, $key = false)
{
// Build the new array
$new_array = array();
// Define groups
$groups = $key === false ? array_keys($source) : array($key);
foreach($groups AS $group)
{
// Get the keys
$keys = array_keys($array[$group]);
// Count the values
$num_entries = count($array[$group][$keys[0]]);
for($i = 0; $i < $num_entries; $i++)
{
foreach($keys AS $key)
{
$new_array[$group][$i][$key] = $array[$group][$key][$i];
}
}
}
return $new_array;
}
函数buildArray($source,$key=false)
{
//构建新阵列
$new_array=array();
//定义组
$groups=$key==false?数组_键($source):数组($key);
foreach($组作为$组)
{
//拿到钥匙
$keys=array_keys($array[$group]);
//计算数值
$num_entries=count($array[$group][$keys[0]]);
对于($i=0;$i<$num_条目;$i++)
{
foreach($key作为$key)
{
$new_数组[$group][$i][$key]=$array[$group][$key][$i];
}
}
}
返回$new_数组;
}
这允许您定义需要构建的密钥;如果未指定,函数将为每个键构建数组。正如Sigateng所建议的那样,除了为/foreach
循环之外,我看不到其他方法:
function buildArray($source, $key = false)
{
// Build the new array
$new_array = array();
// Define groups
$groups = $key === false ? array_keys($source) : array($key);
foreach($groups AS $group)
{
// Get the keys
$keys = array_keys($array[$group]);
// Count the values
$num_entries = count($array[$group][$keys[0]]);
for($i = 0; $i < $num_entries; $i++)
{
foreach($keys AS $key)
{
$new_array[$group][$i][$key] = $array[$group][$key][$i];
}
}
}
return $new_array;
}
函数buildArray($source,$key=false)
{
//构建新阵列
$new_array=array();
//定义组
$groups=$key==false?数组_键($source):数组($key);
foreach($组作为$组)
{
//拿到钥匙
$keys=array_keys($array[$group]);
//计算数值
$num_entries=count($array[$group][$keys[0]]);
对于($i=0;$i<$num_条目;$i++)
{
foreach($key作为$key)
{
$new_数组[$group][$i][$key]=$array[$group][$key][$i];
}
}
}
返回$new_数组;
}
这允许您定义需要构建的密钥;如果未指定,函数将为每个键构建数组。这将完成此工作
function restructure($arr){
$newArr = array();
foreach($arr as $k => $v){
foreach($v as $k1 => $v1){
foreach($v1 as $k2 => $v2){
$newArr[$k][$k2][$k1] = $v2;
}
}
}
return $newArr;
}
这就行了
function restructure($arr){
$newArr = array();
foreach($arr as $k => $v){
foreach($v as $k1 => $v1){
foreach($v1 as $k2 => $v2){
$newArr[$k][$k2][$k1] = $v2;
}
}
}
return $newArr;
}
您正在寻找一种单行程序解决方案吗?使用
foreach
index[0]在您的解决方案中的位置,可以肯定上面的内容很简单吗?您只扫描了1和2。通过创建一个新的结果数组并使用foreach($someArr as$key=>$value)@sigateng可以很容易地解决这类问题。我正在寻找一种更好的方法,通过子索引排列每个第一个数组。上面的示例使用0、1和2索引。最后一个子索引是从0开始到任意数字。@Erwin Moller。它从0开始。您是否正在寻找一个线性解决方案?使用foreach
index[0]在您的解决方案中的位置,可以肯定上面的内容很简单吗?您只扫描了1和2。通过创建一个新的结果数组并使用foreach($someArr as$key=>$value)@sigateng可以很容易地解决这类问题。我正在寻找一种更好的方法,通过子索引排列每个第一个数组。上面的示例使用0、1和2索引。最后一个子索引是从0开始到任意数字。@Erwin Moller。它从0开始。然后也许你应该先测试它。@Truth-用你想要翻转为formatit的数组调用它($arr['text'])@法塔莱罗:那么你应该在你的回答中提到它,你不认为/它起作用了吗。。。但是,如果第一个索引发生变化,我想在不同的位置使用相同的函数,使用相同的数组结构,但不同的索引,那么您可能应该首先测试它。@Truth-使用您想要翻转为formatit的数组调用它($arr['text'])@法塔莱罗:那么你应该在你的回答中提到它,你不认为/它起作用了吗。。。但是如果第一个索引发生变化,我想在不同的位置使用相同的函数,使用相同的数组结构,但不同的索引该怎么办?您的输出与OP要求的不同,请阅读输出示例carefully@SiGanteng你说得对,我没有注意到第一个text
索引,我的问题是“text”是第一级索引。如果有其他第一阶段数组索引,如“按钮”、“视频”等,该如何处理?@zourbuth这取决于您如何接收数组以及需要什么输出。text
是静态键吗(您将始终查找并且仅查找text
索引?)在我的示例中,我使用数组中的第一个键作为分组clause@Strae是的,你说得对。“文本”是第一维数组的唯一ID。谢谢。您的输出与OP要求的不同,请阅读输出示例carefully@SiGanteng你说得对,我没有注意到第一个text
索引,我的问题是“text”是第一级索引。如果有其他第一阶段数组索引,如“按钮”、“视频”等,该如何处理?@zourbuth这取决于您如何接收数组以及需要什么输出。text
是静态键吗(您将始终查找并且仅查找text
索引?)在我的示例中,我使用数组中的第一个键作为分组clause@Strae是的,你说得对。“文本”是第一维数组的唯一ID。谢谢