如何让两个数组相互对应?
例如,这是我生成的第一个月数组,
Array
(
[0] => Sep
[1] => Oct
[2] => Nov
[3] => Dec
[4] => Jan
[5] => Feb
[6] => Mar
[7] => Apr
[8] => May
[9] => Jun
[10] => Jul
[11] => Aug
)
这是第二个月的数组,
Array
(
[0] => Sep
[1] => May
[2] => Apr
)
但我希望第二个月的数组遵循与第一个月数组相同的顺序,以此作为结果返回
Array
(
[0] => Sep
[1] => Apr
[2] => May
)
有可能吗?
修改
我用来生成上面的月份数组的代码,
# Set month array for the calendar and for the items.
$months_calender = array();
$months_items = array();
# Set variable for requested month/year.
$requested_year = set_variable($_REQUEST,'year');
$requested_month = set_variable($_REQUEST,'month');
# Set current month and curren year.
$current_month = (int)date('m');
$current_year = (int)date('Y');
# Loop the 12 month and starts from the current month.
for($x = $current_month; $x < $current_month+12; $x++) $months_calender[] = date('M', mktime(0, 0, 0, $x, 1));
print_r($months_calender);
//echo $current_year;
# Check if the requested by $_REQUEST does not exit then use the current month/year as the requested month/year.
$requested_year = $requested_year? $requested_year : $current_year;
$requested_month = $requested_month? $requested_month : date('m', mktime(0, 0, 0, $current_month, 1));
//var_dump($requested_year);
//echo $requested_month;
# Use the stored connection object from the class_page_controller.php, to process the query
$items_monthly = $connection->fetch_all($sql_items_monthly,array($requested_year));
$total_items_monthly = $connection->num_rows($sql_items_monthly,array($requested_year));
//print_r($items_monthly);
# Check if the total items is more than 0, then loop the result to make an 1-d array.
if($total_items_monthly > 0) foreach($items_monthly as $item_monthly) $months_items[] = $item_monthly['archiveMonth'];
print_r($months_items);
sql,
$sql_items_monthly = "
SELECT
DATE_FORMAT(p.pg_backdate, '%b') AS archiveMonth,
COUNT(p.pg_backdate)
FROM root_pages AS p
WHERE DATE_FORMAT(p.pg_backdate, '%Y') = ?
AND p.cat_id = '2'
AND p.parent_id = '6'
AND p.pg_hide != '1'
GROUP BY archiveMonth
ORDER BY p.pg_backdate DESC
";
修改
看来我可以得到这个结果,
$result = array_intersect($months_calender, $months_items);
print_r($result);
返回,
Array
(
[0] => Sep
[7] => Apr
[8] => May
)
即使keys
没有从0到2开始,但也没关系。除非你有更好的解决方案。
答案 0 :(得分:1)
array_intersect
和ksort
的简单组合可以解决问题:
$array2 = array_intersect($array1, $array2);
ksort($array2);
<强> See it in action 强>
如果由于某种原因你想在此之后有连续的整数键,那么重新索引生成的数组也很容易:
$array2 = array_values($array2);
答案 1 :(得分:0)
uksort似乎提供了一种可能性:http://php.net/manual/en/function.uksort.php
它允许您使用自己的排序功能定义如何对数组进行排序。您可以使用自定义函数对数组执行每个键的搜索,然后按索引对它们进行排序。
答案 2 :(得分:0)
/**
* @var array $all All months in the correct order
* @var array $selected Selected months in any order
*/
$result = array_intersect($all, $selected);
编辑:我刚看完你的编辑,发现你得到了相同的答案。要解决索引问题,只需将结果包装在array_values();
$result = array_values(array_intersect($all, $selected));