jtified Posted September 4, 2009 Report Share Posted September 4, 2009 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. Quote Link to comment Share on other sites More sharing options...
dms Posted September 4, 2009 Report Share Posted September 4, 2009 (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 September 4, 2009 by dms Quote Link to comment Share on other sites More sharing options...
falkencreative Posted September 4, 2009 Report Share Posted September 4, 2009 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'; Quote Link to comment Share on other sites More sharing options...
jtified Posted September 4, 2009 Author Report Share Posted September 4, 2009 (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 September 4, 2009 by jtified Quote Link to comment Share on other sites More sharing options...
jtified Posted September 4, 2009 Author Report Share Posted September 4, 2009 So we can insert additional items in an assoc. array in the end of the array but not in the beginning of it. Quote Link to comment Share on other sites More sharing options...
falkencreative Posted September 4, 2009 Report Share Posted September 4, 2009 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. Quote Link to comment Share on other sites More sharing options...
jtified Posted September 4, 2009 Author Report Share Posted September 4, 2009 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: Quote Link to comment Share on other sites More sharing options...
dms Posted September 4, 2009 Report Share Posted September 4, 2009 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); ?> Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.