Add a Prefix to Each Item of a PHP Array

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 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

Regex to Add a postfix to each item of a PHP array

If you want to use preg_filter with a regex for this, replace ^ with $ (the end of string) (or \z - the very end of the string):

$array = ["a", "b", "c", "d", "f"];
$suffixed_array = preg_filter('/$/', '_M', $array);
print_r($suffixed_array);

See the PHP demo

A non-regex way is to use array_map like this:

$suffixed_array = array_map(function ($s) {return $s . '_M';}, $array);

See this PHP demo.

PHP: Adding prefix strings to array values

In the case that you're using a PHP version >= 5.3:

$array = array('a', 'b', 'c');
array_walk($array, function(&$value, $key) { $value .= 'd'; } );

Is there a reliable PHP one liner to suffix/prefix array values?

$newelements = array_map(function($x){ return $x . ':hover'; }, $elements);

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

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

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

Adding prefix ' ' from my array tree

I think this should do it.

function pdf_content($items, $parentId = 0, $prefix = '>')
{
$str = '';
foreach ($items as $item)
{
if ($item['parent_id'] == $parentId) {
$str .= '<li>';
$str .= $prefix.$item['sku'];
$str .= pdf_content($items, $item['id'], $prefix.'>');
$str .= '</li>';
}
}
if ($str) {
$str = "<ol class='dashed'>" . $str . '</ol>';
}
return $str;
}

$string = pdf_content($array);

This is what I get as the Output -

>Parent
>>Parent 39
>>>Parent 40
>>>Parent 40
>>Parent 39


Related Topics



Leave a reply



Submit