Combine Similar Strings Value into Unique One - php

I'm fetching a post meta from Wordpress CPT which's returning multiple strings form individually instead of array as shown below:
$data = $calendar->data();
foreach ($data as $event) {
$days = get_post_meta( $event->ID, 'sp_day', true );
var_dump($days);
}
string(1) "1" string(1) "1" string(1) "1" string(1) "1" string(1) "1"
string(1) "1" string(1) "2" string(1) "2" string(1) "2" string(1) "2"
string(1) "2" string(1) "2" string(1) "3" string(1) "3" string(1) "3"
string(1) "3" string(1) "3" string(1) "3" string(1) "4" string(1) "4"
string(1) "4" string(1) "4" string(1) "4" string(1) "4" string(0) ""
string(0) "" string(0) "" string(0) "" string(0) "" string(0) ""
I tried to convert it into array like $days = array(get_post_meta( $event->ID, 'sp_day', true )); the dump values were:
array(1) { [0]=> string(1) "1" } array(1) { [0]=> string(1) "1" }
array(1) { [0]=> string(1) "1" } array(1) { [0]=> string(1) "1" }
array(1) { [0]=> string(1) "1" } array(1) { [0]=> string(1) "1" }
array(1) { [0]=> string(1) "2" } array(1) { [0]=> string(1) "2" }
array(1) { [0]=> string(1) "2" } array(1) { [0]=> string(1) "2" }
array(1) { [0]=> string(1) "2" } array(1) { [0]=> string(1) "2" }
array(1) { [0]=> string(1) "3" } array(1) { [0]=> string(1) "3" }
array(1) { [0]=> string(1) "3" } array(1) { [0]=> string(1) "3" }
array(1) { [0]=> string(1) "3" } array(1) { [0]=> string(1) "3" }
array(1) { [0]=> string(1) "4" } array(1) { [0]=> string(1) "4" }
array(1) { [0]=> string(1) "4" } array(1) { [0]=> string(1) "4" }
array(1) { [0]=> string(1) "4" } array(1) { [0]=> string(1) "4" }
array(1) { [0]=> string(0) "" } array(1) { [0]=> string(0) "" }
array(1) { [0]=> string(0) "" } array(1) { [0]=> string(0) "" }
array(1) { [0]=> string(0) "" } array(1) { [0]=> string(0) "" }
Than I tried the array_merge() and array_unique()
None of the above steps have solved the issue. As you can see we have repeated values multiple times instead I want them unique to get each value only once such "1, 2, 3, 4, 5, etc."
Suggestions are highly appreciated

you can add an empty array before the for loop and inside the for loop you can check if the item exist in the array, if it doesn't exist you add the item to the array.
$data = $calendar->data();
$result = [];
foreach ($data as $event) {
$days = get_post_meta( $event->ID, 'sp_day', true );
if(! in_array($days, $result)) {
$result[] = $days;
}
}
var_dump($result);

Related

two array foreach echo

I am having trouble with showing my data. i have 2 arrays, i want to check it if array 2 is equal to array 1. in the sample array below the output should be like this. Any answers would be appreciated. i am a newbie
100000, 010000, 010000, 000001, 000001, 100000, 100000
array 1 data
array(6) {
[0]=>
object(stdClass)#370 (1) {
["id"]=>
string(1) "1"
}
[1]=>
object(stdClass)#369 (1) {
["id"]=>
string(1) "2"
}
[2]=>
object(stdClass)#368 (1) {
["id"]=>
string(1) "3"
}
[3]=>
object(stdClass)#367 (1) {
["id"]=>
string(1) "4"
}
[4]=>
object(stdClass)#366 (1) {
["id"]=>
string(1) "5"
}
[5]=>
object(stdClass)#365 (1) {
["id"]=>
string(1) "6"
}
}
array 2 data
array(7) {
[0]=>
object(stdClass)#354 (1) {
["stage_id"]=>
string(1) "1"
}
[1]=>
object(stdClass)#355 (1) {
["stage_id"]=>
string(1) "2"
}
[2]=>
object(stdClass)#353 (1) {
["stage_id"]=>
string(1) "2"
}
[3]=>
object(stdClass)#352 (1) {
["stage_id"]=>
string(1) "6"
}
[4]=>
object(stdClass)#378 (1) {
["stage_id"]=>
string(1) "6"
}
[5]=>
object(stdClass)#377 (1) {
["stage_id"]=>
string(1) "1"
}
[6]=>
object(stdClass)#376 (1) {
["stage_id"]=>
string(1) "1"
}
}
This is what i have tried and doesnt work. it only shows 100000
foreach ($this->stage as $index => $object)
{
if (isset($this->items[$index]) && $object->id == $this->items[$index]->stage_id)
{
echo 1;
}
else
{
echo 0;
}
}

making new arrays in 1 multidimensional array on looping statement codeigniter

guys lets play in multidimensional array little bit :p
lets said i have $filter which it contain multidimensional array :
array(2) {
["time"]=>
array(3) {
[0]=>
string(1) "1"
[1]=>
string(1) "2"
[2]=>
string(1) "3"
}
["people"]=>
array(5) {
[0]=>
string(1) "1"
[1]=>
string(1) "2"
[2]=>
string(1) "3"
[3]=>
string(1) "4"
[4]=>
string(1) "5"
}
}
from the array it should be return :
array(3) {
["time"]=>
string(1) "1"
["people"]=>
string(1) "1"
["promo_id"]=>
string(1) "1"
}
array(3) {
["time"]=>
string(1) "1"
["people"]=>
string(1) "2"
["promo_id"]=>
string(1) "1"
}
array(3) {
["time"]=>
string(1) "1"
["people"]=>
string(1) "3"
["promo_id"]=>
string(1) "1"
}
array(3) {
["time"]=>
string(1) "1"
["people"]=>
string(1) "4"
["promo_id"]=>
string(1) "1"
}
array(3) {
["time"]=>
string(1) "1"
["people"]=>
string(1) "5"
["promo_id"]=>
string(1) "1"
}
array(3) {
["time"]=>
string(1) "2"
["people"]=>
string(1) "1"
["promo_id"]=>
string(1) "1"
}
array(3) {
["time"]=>
string(1) "2"
["people"]=>
string(1) "2"
["promo_id"]=>
string(1) "1"
}
array(3) {
["time"]=>
string(1) "2"
["people"]=>
string(1) "3"
["promo_id"]=>
string(1) "1"
}
array(3) {
["time"]=>
string(1) "2"
["people"]=>
string(1) "4"
["promo_id"]=>
string(1) "1"
}
array(3) {
["time"]=>
string(1) "2"
["people"]=>
string(1) "5"
["promo_id"]=>
string(1) "1"
}
array(3) {
["time"]=>
string(1) "3"
["people"]=>
string(1) "1"
["promo_id"]=>
string(1) "1"
}
array(3) {
["time"]=>
string(1) "3"
["people"]=>
string(1) "2"
["promo_id"]=>
string(1) "1"
}
array(3) {
["time"]=>
string(1) "3"
["people"]=>
string(1) "3"
["promo_id"]=>
string(1) "1"
}
array(3) {
["time"]=>
string(1) "3"
["people"]=>
string(1) "4"
["promo_id"]=>
string(1) "1"
}
array(3) {
["time"]=>
string(1) "3"
["people"]=>
string(1) "5"
["promo_id"]=>
string(1) "1"
}
actually i could get that result with this following code :
foreach ($filter['time'] as $row){
foreach ($filter['people'] as $item){
$new_array['time'] = $row;
$new_array['people'] = $item;
$new_array['promo_id'] = $promo_id;
vd($new_array,"new");
}
}
but i cant use that following code, because it using $filter['time'] and $filter['people'], how about if the time or people is a random string?
so can you show me guys, to looping it from $filter?
as like this :
foreach ($filter as $key => $row){
}
thank you (:
function combination($arr,$res,$completed_key){
$array_key = array_keys($arr);
$last_array_key = array_pop($array_key);
$start = false;
$temp = $res;
$res=array();
$i=0;
foreach($arr as $key=>$row){
if(!in_array($key,$completed_key)&& $start==false){
array_push($completed_key,$key);
$start=true;
}
if($start){
if(count($temp)==0){
foreach($row as $key2 => $row2){
$res[][$key]=$row2;
}
}else{
foreach($temp as $temp_key=>$temp_row){
foreach($row as $key2 => $row2){
$res[$i]=$temp_row;
$res[$i][$key]=$row2;
$i++;
}
}
}
}
if($start){
break;
}
}
if(!in_array($last_array_key,$completed_key)){
return $this->combination($arr,$res,$completed_key,$debugger);
}else{
return $res;
}
}
This function will return you want.
$filter["time"]=array(1,2,3);
$filter["people"]=array(1,2);
$filter["size"]=array("a","b");
$res=$this->combination($filter,array(),array());
I'll explain later.

combine some data in 1 arrray if in same id on multidimesensional array

I have a multidimensional array $voucher_data with this following array :
array(6) {
[0]=>
array(5) {
["voucher_id"]=>
string(1) "1"
["menu_id"]=>
string(3) "521"
["qty"]=>
string(1) "2"
["variant_menu_id"]=>
string(1) "2"
["voucher_menu_id"]=>
string(1) "3"
}
[1]=>
array(5) {
["voucher_id"]=>
string(1) "1"
["menu_id"]=>
string(3) "521"
["qty"]=>
string(1) "2"
["variant_menu_id"]=>
string(1) "6"
["voucher_menu_id"]=>
string(1) "3"
}
[2]=>
array(5) {
["voucher_id"]=>
string(1) "1"
["menu_id"]=>
string(3) "521"
["qty"]=>
string(1) "1"
["variant_menu_id"]=>
string(1) "1"
["voucher_menu_id"]=>
string(1) "4"
}
[3]=>
array(5) {
["voucher_id"]=>
string(1) "1"
["menu_id"]=>
string(3) "521"
["qty"]=>
string(1) "1"
["variant_menu_id"]=>
string(1) "6"
["voucher_menu_id"]=>
string(1) "4"
}
[4]=>
array(5) {
["voucher_id"]=>
string(1) "1"
["menu_id"]=>
string(3) "519"
["qty"]=>
string(1) "2"
["variant_menu_id"]=>
NULL
["voucher_menu_id"]=>
string(1) "1"
}
[5]=>
array(5) {
["voucher_id"]=>
string(1) "1"
["menu_id"]=>
string(3) "525"
["qty"]=>
string(1) "3"
["variant_menu_id"]=>
NULL
["voucher_menu_id"]=>
string(1) "2"
}
}
In my array [0] and [1] the voucher_menu_id is 3. They have same voucher_menu_id and also [2] and [3] is 4
So i want to combine the variant_menu_id become 1 array become like this :
array(4) {
[0]=>
array(5) {
["voucher_id"]=>
string(1) "1"
["menu_id"]=>
string(3) "521"
["qty"]=>
string(1) "2"
["variant_menu_id"]=>
array(2){
string(1) "2"
string(1) "6"
}
["voucher_menu_id"]=>
string(1) "3"
}
[1]=>
array(5) {
["voucher_id"]=>
string(1) "1"
["menu_id"]=>
string(3) "521"
["qty"]=>
string(1) "1"
["variant_menu_id"]=>
array(2){
string(1) "1"
string(1) "4"
}
["voucher_menu_id"]=>
string(1) "4"
}
}
[2]=>
array(5) {
["voucher_id"]=>
string(1) "1"
["menu_id"]=>
string(3) "519"
["qty"]=>
string(1) "2"
["variant_menu_id"]=>
NULL
["voucher_menu_id"]=>
string(1) "1"
}
[3]=>
array(5) {
["voucher_id"]=>
string(1) "1"
["menu_id"]=>
string(3) "525"
["qty"]=>
string(1) "3"
["variant_menu_id"]=>
NULL
["voucher_menu_id"]=>
string(1) "2"
}
}
Guys can you help me how to combine it?
Thank you (:
Just like the comment above, just use your voucher_menu_id as your key into assigning the new container. Use that so that it'll be group when you loop:
$new_array = array();
foreach ($voucher_data as $v) {
if(empty($new_array[$v['voucher_menu_id']])) { // if empty initialize
$new_array[$v['voucher_menu_id']] = $v; // base array group
$new_array[$v['voucher_menu_id']]['variant_menu_id'] = array(); // intialize container
}
// push id
$new_array[$v['voucher_menu_id']]['variant_menu_id'][] = $v['variant_menu_id'];
}
$new_array = array_values($new_array); // array reindex
Untested, but something like this might work:
$output = array();
foreach ($array as $entry) {
// make the variant_menu_id an array
$entry['variant_menu_id'] = (array) $entry['variant_menu_id'];
$key = $entry['voucher_menu_id'];
if (!array_key_exists($key, $output)) {
// create a new entry in the output array using the entire $entry
$output[$key] = $entry;
continue;
}
// otherwise, add your variant menu ID to the existing values
$output[$key]['variant_menu_id'] = array_merge($output[$key]['variant_menu_id'], $entry['variant_menu_id']);
}
This will essentially create a new array by grouping entries by their voucher_menu_id, and adding variant_menu_id values into an array in the $output.

Get specific value from PHP array using foreach key value

I have the following array:
array(15) {
[0]=> object(stdClass)#317 (2) { ["id"]=> string(1) "2" ["value"]=> string(1) "1" }
[1]=> object(stdClass)#316 (2) { ["id"]=> string(1) "3" ["value"]=> string(531) "awfaww" }
[2]=> object(stdClass)#315 (2) { ["id"]=> string(1) "4" ["value"]=> string(1) "1" }
[3]=> object(stdClass)#318 (2) { ["id"]=> string(1) "5" ["value"]=> string(1) "1" }
[4]=> object(stdClass)#319 (2) { ["id"]=> string(1) "6" ["value"]=> string(1) "1" }
[5]=> object(stdClass)#320 (2) { ["id"]=> string(1) "7" ["value"]=> string(1) "1" }
[6]=> object(stdClass)#321 (2) { ["id"]=> string(1) "8" ["value"]=> string(1) "1" }
[7]=> object(stdClass)#322 (2) { ["id"]=> string(2) "30" ["value"]=> string(8) "12:30:02" }
[8]=> object(stdClass)#323 (2) { ["id"]=> string(2) "31" ["value"]=> string(8) "18:12:00" }
[9]=> object(stdClass)#324 (2) { ["id"]=> string(2) "11" ["value"]=> string(10) "2014-06-17" }
[10]=> object(stdClass)#325 (2) { ["id"]=> string(2) "12" ["value"]=> string(10) "2014-06-26" }
[11]=> object(stdClass)#326 (2) { ["id"]=> string(2) "14" ["value"]=> string(1) "2" }
[12]=> object(stdClass)#327 (2) { ["id"]=> string(2) "15" ["value"]=> string(1) "2" }
[13]=> object(stdClass)#328 (2) { ["id"]=> string(2) "16" ["value"]=> string(1) "4" }
[14]=> object(stdClass)#329 (2) { ["id"]=> string(2) "17" ["value"]=> string(1) "5" }
}
I would like to get a specific value from this array using the ID. For example, if the ID: 11 is found in the array I want to retrieve its value. How can I do this?
Try something like this:
<?php
function findById($array, $id) {
foreach ($array as $value) {
if ($value->id == $id) {
return $value->value;
}
}
return null;
}
$result = findById($yourArray, 11);
?>
if the array is static for each run - i'd suggest changing the array into "key"=>"value" array, using this:
$new_arr = array();
foreach($original_array as $object) {
$new_arr[$object->id] = $object->value;
}
and then you can just use $new_arr[id], instead of searching the whole original array each time.
You can use array_filter:
array_filter($arr, function($i) { return $i->id == '11'; });
See Documentation

Select all rows from table in Yii

I want get all rows of ref table : ciudad
public function actionGetCiudades(){
$model = ciudad::model()->findAll();
$lCiudades = array();
$i=0;
$dataReader = Yii::app()->db->createCommand( 'SELECT * FROM ciudad' )->query();
foreach( $dataReader as $row ) {
$ciudad = new ciudad;
echo $row->ciudadid.":".$row->estadoid.":".$row->ciudaddsc.":".$row->activo;
echo "<br/";
unset( $ciudad );
}
Unfortunately, output is :
:::
But I have 700+ rows in my table.
What's wrong???
UPDATE :
var_dump($dataReader) -->
array(4) { ["ciudadid"]=> string(1) "1" ["estadoid"]=> string(1) "1" ["ciudaddsc"]=> string(15) "VALLE DE MEXICO" ["activo"]=> string(1) "1" } [1]=> array(4) { ["ciudadid"]=> string(1) "2" ["estadoid"]=> string(1) "1" ["ciudaddsc"]=> string(6) "TOLUCA" ["activo"]=> string(1) "1" } [2]=> array(4) { ["ciudadid"]=> string(1) "3" ["estadoid"]=> string(1) "1" ["ciudaddsc"]=> string(11) "ATLACOMULCO" ["activo"]=> string(1) "1" } [3]=> array(4) { ["ciudadid"]=> string(1) "4" ["estadoid"]=> string(1) "2" ["ciudaddsc"]=> string(14) "AGUASCALIENTES" ["activo"]=> string(1) "1" } [4]=> array(4) { ["ciudadid"]=> string(1) "5" ["estadoid"]=> string(1) "2" ["ciudaddsc"]=> string(18) "SAN JOSE DE GRACIA" ["activo"]=> string(1) "1" } [5]=> array(4) { ["ciudadid"]=> string(1) "6" ["estadoid"]=> string(1) "2" ["ciudaddsc"]=> string(19) "PABELLON DE ARTEAGA" ["activo"]=> string(1) "1" } [6]=> array(4) { ["ciudadid"]=> string(1) "7" ["estadoid"]=> string(1) "2" ["ciudaddsc"]=> string(8) "CALVILLO" ["activo"]=> string(1) "1" } [7]=> array(4) { ["ciudadid"]=> string(1) "8" ["estadoid"]=> string(1) "2" ["ciudaddsc"]=> string(19) "ENCARNACION DE DIAZ" ["activo"]=> string(1) "1" } [8]=> array(4) { ["ciudadid"]=> string(1) "9" ["estadoid"]=> string(1) "2" ["ciudaddsc"]=> string(15) "RINCON DE ROMOS" ["activo"]=> string(1) "1" } [9]=> array(4) { ["ciudadid"]=> string(2) "10" ["estadoid"]=> string(1) "3" ["ciudaddsc"]=> string(8) "ENSENADA" ["activo"]=> string(1) "1" } [10]=> array(4) { ["ciudadid"]=> string(2) "11" ["estadoid"]=> string(1) "3" ["ciudaddsc"]=> string(7) "TIJUANA" ["activo"]=> string(1) "1" } [11]=> array(4) { ["ciudadid"]=> string(2) "12" ["estadoid"]=> string(1) "3" ["ciudaddsc"]=> string(8) "MEXICALI" ["activo"]=> string(1) "1" } [12]=> array(4) { ["ciudadid"]=> string(2) "13" ["estadoid"]=> string(1) "3" ["ciudaddsc"]=> string(8) "ROSARITO" ["activo"]=> string(1) "1" } [13]=> array(4) { ["ciudadid"]=> string(2) "14" ["estadoid"]=> string(1) "3" ["ciudaddsc"]=> string(6) "TECATE" ["activo"]=> string(1) "1" } [14]=> array(4) { ["ciudadid"]=> string(2) "15" ["estadoid"]=> string(1) "3" ["ciudaddsc"]=> string(7) "LA MESA" ["activo"]=> string(1) "1" } [15]=> array(4) { ["ciudadid"]=> string(2) "16" ["estadoid"]=> string(1) "4" ["ciudaddsc"]=> string(6) "LA PAZ" ["activo"]=> string(1) "1" } [16]=> array(4) { ["ciudadid"]=> string(2) "17" ["estadoid"]=> string(1) "4" ["ciudaddsc"]=> string(9) "LOS CABOS" ["activo"]=> string(1) "1" } [17]=> array(4) { ["ciudadid"]=> string(2) "18" ["estadoid"]=> string(1) "4" ["ciudaddsc"]=> string(7) "COMONDU" ["activo"]=> string(1) "1" } [18]=> array(4) { ["ciudadid"]=> string(2) "19" ["estadoid"]=> string(1) "4" ["ciudaddsc"]=> string(14) "CABOS AN LUCAS" ["activo"]=> string(1) "1" } [19]=> array(4) { ["ciudadid"]=> string(2) "20" ["estadoid"]=> string(1) "4" ["ciudaddsc"]=> string(17) "SAN JOSE DEL CABO" ["activo"]=> string(1) "1" } [20]=> array(4) { ["ciudadid"]=> string(2) "21" ["estadoid"]=> string(1) "4" ["ciudaddsc"]=> string(19) "CIUDAD CONSTITUCION" ["activo"]=> string(1) "1" } [21]=> array(4) { ["ciudadid"]=> string(2) "22" ["estadoid"]=> string(1) "5" ["ciudaddsc"]=> string(8) "CAMPECHE" ["activo"]=> string(1) "1" } [22]=> array(4) { ["ciudadid"]=> string(2) "23" ["estadoid"]=> string(1) "5" ["ciudaddsc"]=> string(17) "CIUDAD DEL CARMEN" ["activo"]=> string(1) "1" } [23]=> array(4) { ["ciudadid"]=> string(2) "24" ["estadoid"]=> string(1) "5" ["ciudaddsc"]=> string(9) "ESCARCEGA" ["activo"]=> string(1) "1" } [24]=> array(4) { ["ciudadid"]=> string(2) "25" ["estadoid"]=> string(1) "5" ["ciudaddsc"]=> string(7) "CALAKUL" ["activo"]=> string(1) "1" } [25]=> array(4) { ["ciudadid"]=> string(2) "26" ["estadoid"]=> string(1) "5" ["ciudaddsc"]=> string(7) "CALKINI" ["activo"]=> string(1) "1" }
Use queryAll() instead of query(). query() adds limit 1 to the sql query and gets only first row matching criteria.
As the Question title is generic let me post a generic answer to the question.
i am using Yii 2.
to get All rows from a table without applying any where class here is how you will get.
$dbusers = New Users;
$users = $dbusers->find()->all();
Your model should look like this.
namespace app\models;
use Yii;
use yii\db\ActiveRecord;
class Users extends ActiveRecord
{
public function rules()
{
return [
[['name', 'id','email','type'], 'required'],
['id', 'numeric'],
];
}
}
Final Code :
public function actionGetCiudades(){
$lCiudades = array();
$dataReader = Yii::app()->db->createCommand( 'SELECT * FROM ciudad' )->queryAll();
foreach( $dataReader as $row ) {
$ciudad->ciudadid = $row['ciudadid'];
$ciudad->estadoid = $row['estadoid'];
$ciudad->ciudaddsc = $row['ciudaddsc'];
$ciudad->activo = $row['activo'];
array_push($lCiudades, $ciudad);
unset( $ciudad );
}
$json = json_encode($lCiudades);
echo $json;
}

Categories