Reputation: 586
For example, i have 2 arrays,
$array_1 = array('100','250','300','50');
$array_2 = array('a','b','c','d');
next step : i'll sort array 1 and pass 2 arrays into a function, for example the function will return values greater than 100 .
Note: Sorting based on the value is important.(descending order).
Like: array which we are passing
rsort($array_1);
$return = parse($array_1,$array_2);
echo "<pre>";
print_r($return);
function parse(array $arr1,array $arr2){
$retArr1 = array();
$retArr2 = array();
foreach($arr1 as $k=>$value){
if($value > 100){
$retArr1[] = $value;
$retArr2[] = $arr2[$k];
}
}
return array($retArr1,$retArr2);
}
Output is coming like
Array
(
[0] => Array
(
[0] => 300
[1] => 250
)
[1] => Array
(
[0] => a
[1] => b
)
)
But i want like
Array
(
[0] => Array
(
[0] => 300
[1] => 250
)
[1] => Array
(
[0] => c
[1] => b
)
)
Upvotes: 0
Views: 116
Reputation: 2561
Hey you did only one mistake, try below code which will definitely give your desire output:
<?php
$array_1 = array('100','250','300','50');
$array_2 = array('a','b','c','d');
arsort($array_1); // make it correct, this was only the mistake done by you.
$return = parse($array_1,$array_2);
function parse(array $arr1,array $arr2){
$retArr1 = array();
$retArr2 = array();
foreach($arr1 as $k=>$value){
if($value > 100){
$retArr1[] = $value;
$retArr2[] = $arr2[$k];
}
}
return array($retArr1,$retArr2);
}
echo "<pre>";
print_r($return);
?>
Upvotes: 0
Reputation: 1319
<?php
$array_1 = array('100','250','300','50');
$array_2 = array('a','b','c','d');
$def = array_combine($array_2, $array_1);
asort($def);
$array = array_filter($def, function($val) {
return $val>100;
});
var_dump($array);
//array(2) {
// ["b"]=>
// string(3) "250"
// ["c"]=>
// string(3) "300"
//}
Then get keys and values.
Upvotes: 0
Reputation: 26153
// sort both arrays
array_multisort($array_1, SORT_DESC, $array_2);
// Take items from array while values of the 1st array > 100
$i = 0;
$res = [];
while ($i < count($array_1) and $array_1[$i] > 100) {
$res[0][] = $array_1[$i];
$res[1][] = $array_2[$i++];
}
print_r($res);
Upvotes: 1
Reputation: 7617
You can create some Array Variables within your parse
Function use them inside your foreach
Loop to build up the data you wish to extract from the 2 Arrays passed as Arguments to the Function. The code below illustrates how:
<?php
$array_1 = array('100','250','300','50');
$array_2 = array('a','b','c','d');
function parse(array $arr1,array $arr2) {
$tmpArr1 = $tmpArr2 = $arrReturn = array();
foreach ($arr1 as $k => $value) {
if ($value > 100) {
$tmpArr1[] = $value;
$tmpArr2[] = $arr2[$k];
}
}
$arrReturn['arr1'] = $tmpArr1;
$arrReturn['arr2'] = $tmpArr2;
return $arrReturn;
}
$return = parse($array_1, $array_2);
var_dump($return);
// DISPLAYS:
array (size=2)
'arr1' =>
array (size=2)
0 => string '250' (length=3)
1 => string '300' (length=3)
'arr2' =>
array (size=2)
0 => string 'b' (length=1)
1 => string 'c' (length=1)
USING ARRAYS WITH NUMERIC INDICES
<?php
$array_1 = array('100','250','300','50');
$array_2 = array('a','b','c','d');
function parse(array $arr1,array $arr2) {
$tmpArr1 = $tmpArr2 = $arrReturn = array();
foreach ($arr1 as $k => $value) {
if ($value > 100) {
$tmpArr1[] = $value;
$tmpArr2[] = $arr2[$k];
}
}
$arrReturn[] = $tmpArr1;
$arrReturn[] = $tmpArr2;
return $arrReturn;
}
$return = parse($array_1, $array_2);
var_dump($return);
// DISPLAYS:
array (size=2)
0 =>
array (size=2)
0 => string '250' (length=3)
1 => string '300' (length=3)
1 =>
array (size=2)
0 => string 'b' (length=1)
1 => string 'c' (length=1)
Upvotes: 0