Reputation: 1771
This is my code, and when I run this function I get this :Warning: array_push() expects parameter 1 to be array
However I define $printed
as an array prior to starting.
$printed = array();
function dayAdvance ($startDay, $endDay, $weekType){
$newdateform = array(
'title' => date("M d", strtotime($startDay))." to ".date("M d", strtotime($endDay)). $type,
'start' => $startDay."T08:00:00Z",
'end' => $startDay."T16:00:00Z",
'url' => "http://aliahealthcareer.com/calendar/".$_GET['fetching']."/".$startDate);
array_push($printed, $newdateform);
if ($weekType=="weekend"){
$days="Saturday,Sunday";
}
if ($weekType=="day"){
$days="Monday,Tuesday,Wednesday,Thuresday,Friday";
}
if ($weekType=="evening"){
$days="Monday,Tuesday,Wednesday";
}
$start = $startDate;
while($startDay <= $endDay) {
$startDay = date('Y-m-d', strtotime($startDay. ' + 1 days'));
$dayWeek = date("l", strtotime($startDay));
$pos = strpos($dayWeek, $days);
if ($pos !== false) {
$newdateform = array(
'title' => date("M d", strtotime($start))." to ".date("M d", strtotime($endDate)). $type,
'start' => $startDate."T08:00:00Z",
'end' => $startDate."T16:00:00Z",
'url' => "http://aliahealthcareer.com/calendar/".$_GET['fetching']."/".$startDate);
array_push($printed, $newdateform);
}
}
}
Upvotes: 11
Views: 115369
Reputation: 21
You need validate whit is_array:
Example
if (is_array($arNumbers)) {
$cellid = array_push($arNumbers, 0);
}
Upvotes: 0
Reputation: 707
Instead of the function array_push()
use $your_array[] = $element_to_be_added;
when you want to add a single element to the array.
As mentioned in the docs, this creates a new array, if the array is null:
Note: If you use array_push() to add one element to the array it's better to use $array[] = because in that way there is no overhead of calling a function.
and:
Note: array_push() will raise a warning if the first argument is not an array. This differs from the $var[] behaviour where a new array is created.
from: http://php.net/manual/en/function.array-push.php
Upvotes: 0
Reputation: 7040
In the scope in which array_push()
is called, $printed
was never initialized. Either declare it as global
or include it in the function parameters:
$printed = array();
.
.
.
function dayAdvance ($startDay, $endDay, $weekType){
global $printed;
.
.
.
}
OR
function dayAdvance ($startDay, $endDay, $weekType, $printed = array()) { ... }
NOTE:
A faster alternative to array_push()
is to simply append values to your array using []
:
$printed[] = $newdateform;
This method will automatically detect if the variable was never initialized, and convert it to an array prior to appending the data (in other words, no error).
UPDATE:
If you want the value of $printed
to persist outside of the function, you must either pass it by reference or declare it as global
. The above examples are NOT equivalent. The following example would be equivalent to using global
(and is, in fact, a better practice than using global
- it forces you to be more deliberate with your code, preventing accidental data manipulation):
function dayAdvance ($startDay, $endDay, $weekType, &$printed) { ... }
Upvotes: 28
Reputation: 2358
You need to use global $printed;
or to add $printed
as a function parameter.
You may also pass the $printed
parameter as reference in your function: http://php.net/manual/en/language.references.pass.php
More about global and variable scopes: http://php.net/manual/en/language.variables.scope.php
Upvotes: 3