2015-01-16 95 views
0

我有一个数组,我从sql数据库中获取,并且每个元素被保存为 YYYY-MM-DD。但我只需要每个元素的年份。我当前的代码:获取数组中每个元素的前4位数

if(isset($_GET['date'])){ 
$dates= unserialize(urldecode($_GET['date'])); 
foreach($dates as $i){ 
$year = substr($i, 0, 4); 
}} 
print_r($year); 

但是当我运行的代码,它只是给了我

我已经尝试过array_slice但没有工作或者

+0

由于您重写'$ year'变量,您只会得到最后一个值......您能告诉我们您想如何使用这些年份值吗? – Tushar

+0

另外需要注意的是,我会提到,在几乎所有语言中,作为变量的'i',传统上都是针对迭代和整数而不是为值而保留的(按照样式约定,不是显式的)。如果你使用'foreach($ date作为$ date)'或'foreach($ dates作为$ s)'(用于'string'),它可能会读得更好,而不会潜在地混淆'$ i'的情况一个整数(例如,当$ i表示一个打包或时代形式,如unix时间戳时)。 –

+0

非常好,我会记住我的朋友 –

回答

3
if(isset($_GET['date'])) { 
    $dates= unserialize(urldecode($_GET['date'])); 
    $year = array(); 
    foreach($dates as $i) { 
     $year[] = substr($i, 0, 4); 
    } 
} 
print_r($year); 

2个小小的变化将解决它。

+0

感谢上帝,我一直在这里待了几个小时,试图找出它!Dankjewel barmhartige samaritaan –

1

原因您$year第一要素的一年是一个变量所以$year的值将在每次迭代时被覆盖尝试将$year定义为array(),因此每次将值添加到新的数组索引上

$year[] = substr($i, 0, 4); 
+0

他已经在代码中。 – Bogdan

+0

我看不到作为数组 –

+0

为什么downvoted请发表评论 –

1

如果你想每个日期的年份,你应该使用它们,因为你提取它们。例如,你可以把它们放入数组:

$years = array(); 
if (isset($_GET['date'])) { 
    $dates= unserialize(urldecode($_GET['date'])); 
    foreach($dates as $i){ 
     $year = (int)substr($i, 0, 4); 
     if (($year >= 1900) && ($year <= 2050)) 
      $years[] = $year; 
    } 
} 
print_r($years); 

请注意,您还可以追加数组$years之前测试日期的有效性。当然,您也可以测试结果数组本身。如果您愿意,您还可以在foreach循环内“即时”使用它们。

但是,您不能重新分配同一个变量不同的值,并期望它不是分配给它的最后一个值。

相关问题