Fastest Way to Add Prefix to Array Keys

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



Leave a reply



Submit