Jasir alwafaa
Jasir alwafaa

Reputation: 586

PHP array index issues

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

Answers (4)

lazyCoder
lazyCoder

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

Pyton
Pyton

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

splash58
splash58

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

demo

Upvotes: 1

Poiz
Poiz

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

Related Questions