我有一个看起来像这样的数组......
Array
(
[0] => Array
(
[region_id] => 1
[region_content] => news2
)
[1] => Array
(
[region_id] => 2
[region_content] => something_else
)
[2] => Array
(
[region_id] => 3
[region_content] => news
)
)
我需要用它做一些事情......
检查数组是否同时包含news
和news2
,如果是,则在新闻之前出现news2时切换其位置。
因此得到的数组看起来像这样:
Array
(
[0] => Array
(
[region_id] => 1
[region_content] => news
)
[1] => Array
(
[region_id] => 2
[region_content] => something_else
)
[2] => Array
(
[region_id] => 3
[region_content] => news2
)
)
所以我需要一些关于如何检查数组以及如何重新排序的帮助。
答案 0 :(得分:0)
这应该按照您的要求进行:
// Check if both news and news2 exist and make sure news come before news2
function checkNewsAndSwap($array)
{
// Obtain the indexes
$indexes = [];
foreach($array as $i => $v) {
if($v['region_content'] == 'news') {
$indexes[1] = $i;
}
elseif($v['region_content'] == 'news2') {
$indexes[2] = $i;
}
}
// Both news and news2 exist
if(isset($indexes[1]) && isset($indexes[2])) {
if($indexes[2] < $indexes[1]) {// If news comes after news2
// Swap them!
$tmp = $array[$indexes[1]]['region_content'];
$array[$indexes[1]]['region_content'] = $array[$indexes[2]]['region_content'];
$array[$indexes[2]]['region_content'] = $tmp;
}
}
return $array;
}
测试代码和结果在这里:http://pastie.org/9637389
答案 1 :(得分:0)
这远不是一种有效的方法或最佳实践,但出于解释的目的:
<?php
$collection = [
[
'region_id' => 1,
'region_content' => 'news2'
],
[
'region_id' => 2,
'region_content' => 'something else'
],
[
'region_id' => 3,
'region_content' => 'news'
],
];
$occurrences = 0;
$final = '';
foreach ($collection as $sub) {
if (in_array($sub['region_content'], ['news', 'news2'])) {
$occurrences++;
$final = $sub['region_content'];
}
}
$toSwitch = ($occurrences == 2) && $final == 'news';
if ($toSwitch) {
foreach ($collection as &$sub) {
if ($sub['region_content'] == 'news2') $sub['region_content'] = 'news';
elseif ($sub['region_content'] == 'news') $sub['region_content'] = 'news2';
}
}
var_dump($collection);
如果region_content
是news
或news2
,我们正在递增出现次数变量。由于我们预计恰好有两次出现 - news
和news2
,我们也会检查news2
是否是第一次出现。因此,如果使用final
填充了news
个变量,我们确信news2
之前的变量是。{/ p>
如果我们需要切换位置,那么如果Occurrences == 2且news2
是第一个的最终结果是布尔表示。
此处切换位置与更改值无异。因为它是字符串我们只是硬编码它。如果它是一些嵌套集合,则可以在第一次迭代中提取其值。
The result of the dump is:
array (size=3)
0 =>
array (size=2)
'region_id' => int 1
'region_content' => string 'news' (length=4)
1 =>
array (size=2)
'region_id' => int 2
'region_content' => string 'something else' (length=14)
2 => &
array (size=2)
'region_id' => int 3
'region_content' => string 'news2' (length=5)