PHP数组索引问题

时间:2016-07-18 11:36:08

标签: php arrays

例如,我有2个数组,

$array_1 = array('100','250','300','50');
$array_2 = array('a','b','c','d');

下一步:我将对数组1进行排序并将2个数组传递给一个函数,例如该函数将返回大于100的值。

注意:根据值进行排序很重要。(降序)。

像: 我们正在传递的数组

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

}

输出就像

Array
(
    [0] => Array
        (
            [0] => 300
            [1] => 250
        )

    [1] => Array
        (
            [0] => a
            [1] => b
        )

)

但我想要

Array
(
    [0] => Array
        (
            [0] => 300
            [1] => 250
        )

    [1] => Array
        (
            [0] => c
            [1] => b
        )

) 

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您可以在parse函数中创建一些数组变量,在foreach循环中使用它们来构建您希望从作为参数传递给函数的2个数组中提取的数据。下面的代码说明了如何:

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

使用带有数字指数的阵列

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

答案 2 :(得分:0)

<?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"
//}

然后获取密钥和值。

答案 3 :(得分:0)

嘿,你只犯了一个错误,尝试下面的代码肯定会给你的欲望输出:

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

?>