我有这个数组
$arr = array(
'one' => array(
'slidertitle' => 'lorem ipsum',
'sliderlocation' => 'http://localhost/images/1.jpg',
'sliderdescription' => 'this is a good lorem ipsum image',
'sliderposition' => 1
),
'two' => array(
'slidertitle' => 'second slider',
'sliderlocation' => 'http://localhost/images/2.jpg',
'sliderdescription' => 'this space was reserved for a link source code here',
'sliderposition' => 2
),
'six' => array(
'slidertitle' => 'sixth slider',
'sliderlocation' => 'http://localhost/images/6.jpg',
'sliderdescription' => 'this is the sixth slider,like,really!',
'sliderposition' => 6
)
);
我需要看起来像这样
$arr = array(
'two' => array(
'slidertitle' => 'second slider',
'sliderlocation' => 'http://localhost/images/2.jpg',
'sliderdescription' => 'this space was reserved for a link source code here',
'sliderposition' => 2
),
'six' => array(
'slidertitle' => 'sixth slider',
'sliderlocation' => 'http://localhost/images/6.jpg',
'sliderdescription' => 'this is the sixth slider,like,really!',
'sliderposition' => 6
),
'one' => array(
'slidertitle' => 'lorem ipsum',
'sliderlocation' => 'http://localhost/images/1.jpg',
'sliderdescription' => 'this is a good lorem ipsum image',
'sliderposition' => 1
)
);
我试图通过定义预期的数组结构并引入一个虚拟数组来做到这一点。然后我将数组块化并将每个块合并为数组格式,我计划最终取消设置虚拟数据,我留下了数组i希望并按照我想要的顺序。
$arrayFormat = array(
'dummy' => array(
'slidertitle' => 'xxxx',
'sliderlocation' => 'xxxxxxx',
'sliderdescription' => 'xxxxxx',
'sliderposition' => 0
)
);
$arrayLength = count($arr);
$afterChunk = array_chunk($arr,$arrayLength);
$one = $afterChunk[0][0];
$two = $afterChunk[0][1];
$mergedArray = array_merge($arrayFormat,$one);
$secondMergedArray = array_merge($mergedArray,$two);
echo '<pre>';
print_r($secondMergedArray);
echo '</pre>';
问题是array_chunk()
不包括数组的键,所以我得到了
Array (
[dummy] => Array
(
[slidertitle] => xxxx
[sliderlocation] => xxxxxxx
[sliderdescription] => xxxxxx
[sliderposition] => 0
)
[slidertitle] => second slider
[sliderlocation] => http://localhost/images/2.jpg
[sliderdescription] => this space was reserved for a link source code here
[sliderposition] => 2 )
当我print_r($secondMergedArray);
。是否可以对array_chunk()
进行包含数组键的操作,还是有任何其他数组函数可以帮助我获得包含密钥的单个数组? / p>
答案 0 :(得分:2)
在如何对元素进行排序方面,很难说出你想要的是什么。你在这个问题上并不是很清楚。数组中必须有一些东西,你知道它需要什么样的顺序。
如果没有任何线索,我会假设你想手动指定数组键的顺序。
因此,当前数组为array('one'=>... , 'two'=>... , 'six'=>... )
,您希望按照要手动指定的顺序对这些键进行排序。
解决方案是使用uksort()
函数以及指定排序顺序的单独数组:
$arr = ... //input array as specified in the question
$sortOrder = array('two','one','six');
uksort($arr, function ($a, $b) use ($sortOrder) {
$sortMe = array_flip($sortOrder);
if ($sortMe[$a] == $sortMe[$b]) { return 0; }
return ($sortMe[$a] < $sortMe[$b]) ? -1 : 1;
});
print_r($arr);
以“两个”,“一个”,“六个”顺序输出数组。根据需要更改$sortOrder
数组。
希望有所帮助。
注意:我上面提供的语法仅适用于PHP 5.3及更高版本。 (如果您使用的是旧版本,则需要升级)
答案 1 :(得分:1)
使用uksort()
获取多维数组的自定义顺序