Jump to content

Recommended Posts

Posted

Hi guys!

 

How can I insert and array with string index or string key. Like for example

 

<?php

 

$example['breakfast'] = 'ham and egg';

$example['lunch'] = 'steak';

$example['snack'] = 'fish and chips';

 

print_r ($example);

 

?>

 

this outputs:

 

Array ( [breakfast] => ham and egg [lunch] => steak [snack] => fish and chips )

 

 

If I wanted to use array_push() or array_unshift(), HOW can I insert an item in the array "$example" that has a string index or string key of ['dinner']. Something like this:

 

<?php

 

$example['breakfast'] = 'ham and egg';

$example['lunch'] = 'steak';

$example['snack'] = 'fish and chips';

 

array_push($example['dinner'] = 'pizza');

print_r ($example);

 

?>

 

It generates the output :

 

Warning: array_push() expects at least 2 parameters, 1 given in C:\wamp\www\SMS 2.0\sample.php on line 16

Array ( [breakfast] => ham and egg [lunch] => steak [snack] => fish and chips [dinner] => pizza )

 

But you see the dinner was inserted..but how do I remove the error.

Posted (edited)

Warning: array_push() expects at least 2 parameters, 1 given in C:\wamp\www\SMS 2.0\sample.php on line 16

Array ( [breakfast] => ham and egg [lunch] => steak [snack] => fish and chips [dinner] => pizza )

 

But you see the dinner was inserted..but how do I remove the error.

 

Just learning myself, but if the warning is asking for two parameters, maybe by just adding a comma after $example will work. eg. [array_push($example, ['dinner'] = 'pizza');].

 

If that doesn't work couldn't you just use $example['dinner'] = 'pizza';

Edited by dms
Posted

When you have an error like this, the first thing you need to do is check the PHP manual for that particular function:

http://us.php.net/array_push. If you still can't get it to work, then a google search for the issue usually works (in this case, I looked up "array_push php associative array").

 

I was able to get your last example to work using PHP4... but it generates an error that I can't seem to fix when I switch to PHP5. The array_push() function requires two parameters -- the array, and the value. In PHP5, it looks like you can't input "$example['dinner']" as the array, because that refers to a specific key, not the entire array.

 

Based on this (http://devzone.zend.com/article/635 -- Under the "Push and Pull" section) it looks like you can't use array_push() with associative arrays. "The array_push() and array_unshift() functions don't work with associative arrays; to add elements to these arrays, it's better to use the $arr[$key] = $value notation to add new values to the array." (this is also faster than calling a function just to add one value to an array.)

 

So, to add a new value to an associative array, just use:

$example['dinner'] = 'pizza';

Posted (edited)

@dms

 

Tried it..none of it works..thanks anyway..

 

@falken

I see. Guess there's no other way to do it..thanks too..

Edited by jtified
Posted

So we can insert additional items in an assoc. array in the end of the array but not in the beginning of it.

As far as I can tell, yes.

 

I don't see how "beginning" or "end" of an associative array make any difference though. It only makes a difference when you print out the array using print_r, but I can't see you doing that often in a project that is going to be visible to a general audience. I can understand if you are relying on the order of an array (like a non-associative array $array[1], $array[2] etc) but that's the whole point of an associative array -- order isn't important, and you will still find all of the data easily because of the key you assigned each value in the array.

Posted

Well, I was also thinking the same way..but I wasn't so sure if there will be a time that I need to insert an item in the beg/end of an array..LOL..and now you've said it, I got the point now..thanks a lot..great help! Have a good day. :cool:

Posted

There may be absolutely no use for this, but if you ever do need to insert an item at the beg/end of an array; you could give the key a name with a low sort value, such as... ['1_dinner'] or a high sort value... ['zzz_dinner'], and then use the ksort() along with array_flip(). The only problem I see is that if you have different keys with the same value, you will lose all but the last key/value pair.

e.g.

<?php

$example['breakfast'] = 'ham and egg';

$example['lunch'] = 'steak';

$example['snack'] = 'fish and chips';

 

$example['1_dinner'] = 'pizza';

 

ksort($example);

foreach ($example as $key => $val) {

echo "$key = $val\n";

}

 

$example = array_flip($example);

$example['pizza'] = 'dinner';

$example = array_flip($example);

print_r($example);

?>

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...