Comments (14)
Looks useful! @ajb-in do you have a good idea for a name?
from functional-php.
No good ideas, other than I'd refer to "keys" rather than "hashes" (and would probably reflect that in the name of the argument).
Also, note that this is equivalent to array_combine(map($collection, $callback), $collection)
from functional-php.
Thanks for the feedback! @ajb-in The function is not exactly equivalent to your example because apart from the keys the values can also be mapped in the callback.
>>> hashMap(
... ['abc', 'foobar'],
... function ($value) {
... return [$value[0], strtoupper($value)];
... }
... )
=> [
"a" => "ABC",
"f" => "FOOBAR",
]
Your example describes another use case: Mapping only the keys. This would have been sufficient for my needs, even better; Perhaps this is also a useful function? A better name for hashMap
could be keyValueMap
and your example could be called keyMap
.
In comparison:
>>> map(
... ['abc', 'foobar'],
... function ($value) {
... return strtoupper($value);
... }
... )
=> [
"ABC",
"FOOBAR",
]
>>> keyMap(
... ['abc', 'foobar'],
... function ($value) {
... return $value[0];
... }
... )
=> [
"a" => "abc",
"f" => "foobar",
]
>>> keyValueMap(
... ['abc', 'foobar'],
... function ($value) {
... return [$value[0], strtoupper($value)];
... }
... )
=> [
"a" => "ABC",
"f" => "FOOBAR",
]
What do you think?
from functional-php.
@MazeChaZer @ajb-in instead of doing key and value mapping in one sweep, we could have a mapKeys()
that does to keys what map does to values.
from functional-php.
@lstrojny Sounds good to me. I like that even better than the keyValueMap
approach.
Edit: Just to be clear, I'm talking about mapKeys()
from functional-php.
Are we at a consens here? Should I start implementing/testing/documenting the mapKeys()
function?
from functional-php.
I for one would use mapKeys
for a different idea (something akin to Haskell's mapKeys
).
But then again, I don't have a better name for this one, and can't find a precedent on the literature apart from the Schwartzian transform.
from functional-php.
What about reindex()
?
from functional-php.
Sounds good to me
from functional-php.
Ok, I'm starting to work on this, if we find an even better name we can still change it later on.
from functional-php.
Mh, what is supposed to happen if the callback produces duplicate keys? Should an exception be thrown or should later values just overwrite previous values that had the same key? I tend to throw an exception.
from functional-php.
I looked a little further into this. The PHP builtins array_flip()
and array_combine()
overwrite previous values which had the same key. Furthermore I saw that in this library exceptions are only thrown for invalid arguments. So I guess the first alternative, just overwriting previous values, makes more sense after all.
from functional-php.
+1 on reindex
.
Also agree with your dup key resolution.
from functional-php.
Thanks for the discussion
from functional-php.
Related Issues (20)
- Flatten array performance HOT 6
- PHP 7? HOT 3
- functional shortcut for array_reduce? HOT 1
- Write docs for converge()
- Porper file comment instead of full license text HOT 1
- The opposite of `select_keys` HOT 2
- Support psalm HOT 10
- Let the default callback argument to function some, none, and every be the identity function HOT 4
- Support .phpstorm.meta
- pick should use array_key_exists instead of isset HOT 3
- Make these functions more expressive HOT 3
- Functions can no longer be called `match` on PHP 8
- [BUG] 1.14.0 breaks when opcache.preload is enabled HOT 1
- PHP 8 Support HOT 3
- Proposal: Add compact() HOT 3
- When will the php v8 be supported? HOT 3
- Use php-quickcheck for testing
- `take_left(sequence_linear(date('Y') - 3, 1), 3)` infinite loop
- Add iterable to the method definitions
- Tail Recursion does not work HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from functional-php.