How to access the specific elements in the array? - arrays

This is the assigning part of the smarty variable in controller file.
$objSmarty->assign( 'seleted_customer_subsidy_race_types', $this->getRequestData( array( 'customer_subsidy_race_types' ) ) );
We get this displayed:
Array
(
[1] => Array
(
[subsidy_race_type_id] => 1
)
[2] => Array
(
[subsidy_race_type_id] => 2
[subsidy_race_sub_type_id] => 2
)
)
How to access subsidy_race_type_id and subsidy_race_sub_type_id fields specifically?

Follow this
foreach($arr as $item) {
print_r($item['subsidy_race_type_id']);
print_r($item['subsidy_race_sub_type_id']);
}

Related

How to remove first dimension of an array without loosing keys?

How can i remove the first dimansion of a multidemensional Array without loosing the keys?
i have an Array that have multiple arrays inside
the firstkey is a Date and the secondkey is the hour.
my Output is:
Array
(
[0] => Array
(
[firstkey] => Array
(
[secondkey] => Array
(
[0] => 7
[1] => 8
)
)
)
[1] => Array
(
[firstkey] => Array
(
[secondkey] => Array
(
[0] => 7
[1] => 8
)
)
)
)
and i want this:
Array
(
[firstkey] => Array
(
[secondkey] => Array
(
[0] => x
[1] => y
[2] => z
[3] => r
)
)
)
i also tried array_merge_recursive() but instead of putting the values to the secondkey it creates a new array with an incremental key
okay found a solution on:
PHP : multidimensional array merge recursive
function array_merge_recursive_ex(array $array1, array $array2)
{
$merged = $array1;
foreach ($array2 as $key => & $value) {
if (is_array($value) && isset($merged[$key]) && is_array($merged[$key])) {
$merged[$key] = array_merge_recursive_ex($merged[$key], $value);
} else if (is_numeric($key)) {
if (!in_array($value, $merged)) {
$merged[] = $value;
}
} else {
$merged[$key] = $value;
}
}
return $merged;
}
and with this function i can merge that mutlidemensional array without loosing keys:
$newarray =[];
foreach($array as $firstkey){
$newarray = array_merge_recursive_ex($newarray, $firstkey);
}

Storing array in session

I’m trying to handle the contents of an array in WordPress, before I store the array within a session the array outputs as follows;
Array
(
[0] => yes
[1] => no
)
However after storing in $wp_session[‘test_array’] it outputs like;
Recursive_ArrayAccess Object
(
[container:protected] => Array
(
[0] => yes
[1] => no
)
[dirty:protected] => 1
)
Is there any advise on returning the array to it’s original format so I can handle it easily.
Cheers for any help
You can do it by serialize() the array before you store it and unserialize() it when you retrieve it.
For Example:
$wp_session['test_array'] = serialize( array( 'yes', 'no' ) );
$test_array = unserialize( $wp_session['test_array'] );
print_r( $test_array );

save all data in single statement without loop

How to save all data in cakePHP. Suppose I have number of records regarding single model I wish to save all data at a time. My array is in format.
Array
(
[Attendance] => Array
(
[0] => Array
(
[date] => 2013-10-09
[user_id] => 10
[attendance] => 1
)
[1] => Array
(
[date] => 2013-10-09
[user_id] => 8
[attendance] => 0
)
)
)
Is this possible to save all data a single time. I tried to do it using saveMany but it was not successful.
Do I need to do it in loop
foreach ($result as $data) {
$this->Attendance->create();
$this->request->data['Attendance'] = $data;
$this->Attendance->save($this->request->data);
}
Try saveMany instead of save
$this->Attendance->saveMany($this->request->data);
data should be in this format :
Array
(
[1] => Array
(
[Attendance] => Array
(
[field] => value
[field] => value
)
)
[2] => Array
(
[Attendance] => Array
(
[field_1] => value
[field_2] => value
)
)
)
CakePHP will save each record for each id you have on the array. The only requirement is to use the array structure convention by them, then use:
// Check method request
if ($this->request->is('post')) {
// Check not empty data
if (!empty($this->data)) {
// Save the data
if ($this-> Attendance->save($this->request->data)) {
// Set a session flash message and redirect.
$this->Session->setFlash('Attendance saved.');
$this->redirect('/Attendances');
} else {
$this->Session->setFlash('Error saving the data.');
}
}
}

Extracting values from arrays in custom fields

I'm trying to come up with a single array of all values in specific custom fields. The values themselves are also arrays. I've tried all sorts of array functions but haven't come across the right one or the right combination. Here is my code thus far:
$args = array(
'post_type' => 'match_report',
'post_status' => 'publish',
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'report_home-scorers'
),
array(
'key' => 'report_away-scorers'
)
)
);
$reportscore = new WP_Query($args);
$scorersResults = array();
if ( $reportscore->have_posts() ) {
while ( $reportscore->have_posts() ) {
$reportscore->the_post();
$homescorers = get_post_meta($post->ID,'report_home-scorers',false);
$awayscorers = get_post_meta($post->ID,'report_away-scorers',false);
foreach ($homescorers as $homescorer){
array_push($scorersResults, $homescorer);
}
foreach ($awayscorers as $awayscorer){
array_push($scorersResults, $awayscorer);
}
?>
<?php } wp_reset_postdata(); //endif
}//endwhile
$scorerResults = remove_empty($scorersResults);
function remove_empty($array) {
return array_filter($array, '_remove_empty_internal');
}
function _remove_empty_internal($value) {
return !empty($value) || $value === 0;
}
Here what I get if I print_r($scorerResults); :
Array
(
[1] => Array
(
[0] => 1
[1] => 63
)
[2] => Array
(
[0] => 263
[1] => 195
)
[3] => Array
(
[0] =>
)
[4] => Array
(
[0] =>
)
)
I just want the values in the internal arrays in an array.
Assuming you want the $scoreResults array to end up as array(1,63,263,195) you could use the array_reduce function like this:
function gatherScores($lhs, $rhs) {
foreach ($rhs as $key => $value)
if ($value)
$lhs[] = $value;
return $lhs;
}
$scorerResults = array_reduce($scorerResults, "gatherScores", array());
I'm not sure what the blank values are in your third and fourth arrays and how they should be handled, so you may need to change the if ($value) condition to check for something different. As it stands it'll obviously also filter out zero scores.

How to sort an array created by the directory_helper in CodeIgniter

So I'm using the directory_map function in the Directory Helper and I'm wondering how I can edit that function (or maybe extend it or something) so that it sorts the multidimensional array it gives me.
Here is the array it currently produces;
Array
(
[publications] => Array
(
[policy_documents] => Array
(
[_careers] => Array
(
[0] => careers.pdf
)
[_background_quality_reports] => Array
(
[0] => industry.pdf
[1] => international.pdf
[2] => departmental_resources.pdf
[3] => contracts.pdf
[4] => research_and_development.pdf
[5] => trade.pdf
)
[_pre_release_access_list] => Array
(
[0] => pre_release_access_list.pdf
)
)
[people] => Array
(
[health] => Array
(
[very_serious_injuries] => Array
(
[_1_january_2013] => Array
(
[0] => 1_january_2013.pdf
)
)
)
[military] => Array
(
[quarterly_manning_report] => Array
(
[_1_january_2013] => Array
(
[0] => 1_january_2013.pdf
)
)
[monthly_manning_report] => Array
(
[_20110201_1_february_2011] => Array
(
[0] => 1_february_2011.xls
[1] => key_points.html
[2] => 1_february_2011.pdf
)
[_20110301_1_march_2011] => Array
(
[0] => 1 March 2011.pdf
)
[_20110501_1_may_2011] => Array
(
[0] => 1 May 2011.pdf
)
[_20110401_1_april_2011] => Array
(
[0] => 1 April 2011.pdf
)
)
)
[civilian] => Array
(
[civilian_personnel_report] => Array
(
[_1_april_2012] => Array
(
[0] => 1_april_2012.pdf
)
[_1_october_2012] => Array
(
[0] => 1_october_2012.pdf
)
[_1_january_2013] => Array
(
[0] => 1_january_2013.pdf
[1] => key_points.html
)
[_1_july_2012] => Array
(
[0] => 1_july 2012.pdf
)
)
)
[search_and_rescue] => Array
(
[monthly] => Array
(
[_1_February_2013] => Array
(
[0] => 1_february_2013.pdf
)
)
[annual] => Array
(
[_2012] => Array
(
[0] => 2012.pdf
)
)
[quarterly] => Array
(
[_q3_2012] => Array
(
[0] => q3_2012.pdf
)
)
)
)
[estate] => Array
(
)
)
)
That's a little messy but you get the idea. Any attempt to wrap a sort() or an asort() around the variable in my model leads to an error. Which is why I think I might have to edit this function or maybe create me a new one...
You have to split up the array sort the files and directories separately since the dir names are in the keys and the file names are in the values.
$dir_map = dir_map_sort(directory_map('folder/name'));
/**
* Sorts the return of directory_map() alphabetically
* directories listed before files
*
* Example:
* a_dir/
* b_dir/
* a_file.dat
* b_file.dat
*/
function dir_map_sort($array)
{
$dirs = array();
$files = array();
foreach ($array as $key => $val)
{
if (is_array($val)) // if is dir
{
// run dir array through function to sort subdirs and files
// unless it's empty
$dirs[$key] = (!empty($array)) ? dir_map_sort($val) : $val;
}
else
{
$files[$key] = $val;
}
}
ksort($dirs); // sort by key (dir name)
asort($files); // sort by value (file name)
// put the sorted arrays back together
// swap $dirs and $files if you'd rather have files listed first
return array_merge($dirs, $files);
}
OR
/**
* Sorts the return of directory_map() alphabetically
* with directories and files mixed
*
* Example:
* a_dir/
* a_file.dat
* b_dir/
* b_file.dat
*/
function dir_map_sort($array)
{
$items = array();
foreach ($array as $key => $val)
{
if (is_array($val)) // if is dir
{
// run dir array through function to sort subdirs and files
// unless it's empty
$items[$key] = (!empty($array)) ? dir_map_sort($val) : $val;
}
else
{
$items[$val] = $val;
}
}
ksort($items); // sort by key
return $items;
}
You can order in SQL select statement (ORDER BY XXX) or in controller use one of these methods at
[1]: http://php.net/manual/en/array.sorting.php php.net

Resources