Fastest way to add prefix to array keys?
I've found that PHPBench is not a very good source for non-trivial benchmarks. So unless your actually interested in running for(....);
it's not going to correctly show which syntax will be faster. I've put together a simple benchmark to show that foreach is actually the fastest when your use both the key and value during the iteration.
It's very important to actually force PHP to read the values from a loop iteration, or else it'll do its best to optimize them out. In the example below I use the doNothing
function to force PHP to calculate the key and value each time. Using doNothing will cause an overhead to be applied to each loop, but it will be the same for each loop since the number of calls will be the same.
I wasn't really that surprised that foreach
came out on top since it's the language construct for iterating a dictionary.
$array = range( 0, 1000000 );
function doNothing( $value, $key ) {;}
$t1_start = microtime(true);
foreach( $array as $key => $value ) {
doNothing( $value, $key );
}
$t1_end = microtime(true);
$t2_start = microtime(true);
$array_size = count( $array );
for( $key = 0; $key < $array_size; $key++ ) {
doNothing( $array[$key], $key );
}
$t2_end = microtime(true);
//suggestion from PHPBench as the "fastest" way to iterate an array
$t3_start = microtime(true);
$key = array_keys($array);
$size = sizeOf($key);
for( $i=0; $i < $size; $i++ ) {
doNothing( $key[$i], $array[$key[$i]] );
}
$t3_end = microtime(true);
$t4_start = microtime(true);
array_walk( $array, "doNothing" );
$t4_end = microtime(true);
print
"Test 1 ".($t1_end - $t1_start)."\n". //Test 1 0.342370986938
"Test 2 ".($t2_end - $t2_start)."\n". //Test 2 0.369848966599
"Test 3 ".($t3_end - $t3_start)."\n". //Test 3 0.78616809845
"Test 4 ".($t4_end - $t4_start)."\n"; //Test 4 0.542922019958
Edit: I'm using PHP 5.3 on 64-bit Mac OSX 10.6
Prefixing array keys with a string (:) in PHP
$source->execute($sql, array(
'foo' => $foo,
'bar' => $bar,
'baz' => $baz
));
This is presuming the above calls PDOStatement::execute()
under the hood, with the above array
as its argument.1
:)
1) Tested with version
5.2.17
and 5.3.8
here, and working as expected. How to add prefix to object keys in javascript?
You can get the keys of the object in an array using the Object.keys()
method. You can then use the Array.reduce()
method to iterate over each of the keys and create a new object with desired prefix.
let obj = {
cart: 4,
trolley: 10,
car: 2,
};
let pre = `shopping_`;
let nObj = Object.keys(obj).reduce((a, c) => (a[`${pre}${c}`] = obj[c], a), {});
console.log(nObj)
Add a prefix to each item of a PHP array
Simple:
foreach ($array as &$value) {
$value *= (-1);
}
unset($value);
Unless the array is a string:
foreach ($array as &$value) {
$value = '-' . $value;
}
unset($value);
How to remove prefix in array keys
One of the ways To Get:Array ( [Size] => 3 [Colour] => 7 )
From your Having: Array ( [attr_Size] => 3 [attr_Colour] => 7 )
$new_arr = array();
foreach($Your_arr as $key => $value) {
list($dummy, $newkey) = explode('_', $key);
$new_arr[$newkey] = $value;
}
If you think there'll be multiple underscores in keys just replace first line inside foreach with list($dummy, $newkey) = explode('attr_', $key);
How to add prefix to array value for each element in array?
You can manipulate the "name" index value according to your requirement like :
$arr = array (1 => array('name' => 'abc', 'age' =>25), 2 => array('name' => 'xyz', 'age' =>28));
foreach ($arr as $key => $val) {
$arr[$key]['name'] = 'Mr. '.$val['name'];
}
click on this link to see result
Better way than array_combine to rename keys in PHP?
array_combine
isn't necessary. A simple foreach
should be enough.
$old = array(
'a'=>1,
'b'=>2
);
$new = array();
foreach ($old as $key => $value) {
$new['prefix.' . $key] = $value;
}
var_dump($new);
output:
array(2) {
["prefix.a"]=>
int(1)
["prefix.b"]=>
int(2)
}
edit;
Your question has already been answered here, including benchmarks for different approches
Adding a prefix to the key of an object in axios
Something like this
let data = {
others: [{
code: "A",
label: "0-A"
},
{
code: "B",
label: "0-B"
},
{
code: "N",
label: "0-N"
}
]
};
let modifiedData = data.others.map(x => {
x.code = `other_${x.code}`;
return x;
})
console.log(modifiedData);
How to add prefix to array values?
Array.prototype.map
is a great tool for this kind of things:
arr.map(function(el) {
return 'images/' + el;
})
In ES2015+:
arr.map(el => 'images/' + el)
How to separate a php array items by prefix
This will give you results for more dynamic prefixs - first explode with the delimiter and then insert by the key to result array.
For separating the value you can use: extract
Consider the following code:
$data = array('status.1','status.2','status.3', 'country.244', 'country.24', 'country.845', 'pm.4','pm.9', 'pm.6');
$res = array();
foreach($data as $elem) {
list($key,$val) = explode(".", $elem, 2);
$res[$key][] = $val;
}
extract($res); // this will separate to var with the prefix name
echo "Status is: " . print_r($status); // will output array of ["1","2","3"]
This snippet took less the 0.001 second...
Thanks @mickmackusa for the simplification
Related Topics
Getting Data with Utf-8 Charset from Mssql Server Using PHP Freetds Extension
Remove Index.PHP in Codeigniter 2.1.0
_Construct() VS Sameasclassname() for Constructor in PHP
Does PHP Execution Stop After a User Leaves the Page
PHP Function with Variable as Default Value for a Parameter
Laravel Error: Missing Required Parameters for Route
"Strict Standards: Only Variables Should Be Passed by Reference" Error
Can You Re-Populate File Inputs After Failed Form Submission with PHP or JavaScript
How to Kill A/All PHP Sessions
Will a Script Continue to Run Even After Closing a Page
Get Most Recent Date from an Array of Dates in "Y-M-D H:I:S" Format
Binding Params for Pdo Statement Inside a Loop
How to Get Closest Date Compared to an Array of Dates in PHP