【问题标题】:PHP: Pass dynamically created variables to a built-in functionPHP:将动态创建的变量传递给内置函数
【发布时间】:2012-04-12 21:50:16
【问题描述】:

问题描述:
我要做的是将动态创建的变量从循环传递到 php 中的函数。更具体地说,我使用了一个 for 循环来创建变量并将数据分配给它们。然后使用 for 循环将所有变量串在一起。然后将字符串传递给 multisort_array 函数并分解字符串以使用变量。我不确定我做错了什么。

问题:
如何在不知道要创建多少的情况下将一堆动态创建的变量传递给排序函数?那是我的错觉。

代码:

$arr2[0] = "100::HOMEDEPOT";
$arr2[1] = "200::WALMART";
$arr2[2] = "300::COSTCO";
$arr2[3] = "400::WALGREENS";
$arr2[4] = "500::TACO BELL";

// explodes first value of $arr2
$tmp = explode("::",$arr2[0]);

// determines how many dynamic variables to create
for($k=0;$k<count($tmp);$k++){
    ${"mArr".$k} = Array();
}

// loops thru & assigns all numbers to mArr0
// loops thru & assigns all names to mArr1
for ($k=0;$k<count($arr2);$k++){
    $tmp = explode("::",$arr2[$k]);

    for($l=0;$l<count($tmp);$l++){
        ${"mArr".$l}[$k] = $tmp[$l];
    }
}

// Will add a for loop to combine the variables into string
$param = "$mArr1,$mArr0";

// send the string to array_multisort to be sorted by name
// have tried the following options:
//   1.   array_multisort(explode(",",$param));
//   2.   call_user_func_array(array_multisort,explode(",",$param));
// both do not sort & give me an error.

提前感谢您的帮助。我愿意接受有关其他方式的任何建议,但如果可能的话,我希望它出现在 php 代码中。

【问题讨论】:

  • switch(count($tmp)){ case 1: array_multisort($mArr0);休息;案例2:array_multisort($mArr1,$mArr0);休息;案例 3:array_multisort($mArr1,$mArr0,$mArr2);休息;案例4:array_multisort($mArr1,$mArr0,$mArr2,$mArr3);休息;案例5:array_multisort($mArr1,$mArr0,$mArr2,$mArr3,$mArr4);休息; } 回声 json_encode($mArr1); // 而不是这样做,我想动态组装一个动态变量列表以通过。

标签: php function variables dynamic


【解决方案1】:

只需将数组本身传递给函数。

arraySort($array);

【讨论】:

  • 我想做的是:array_multisort($mArr1, $mArr0, $mArr2,$mArr3);但我不知道我会有多少 $mArr##。
  • multisort 将采用多维数组。不要从数组中创建一个字符串,而是将它们加载到另一个数组中。
  • 另外,你到底想做什么?这看起来真的很乱。无意冒犯,但我确信有更好的方法来完成你正在做的任何事情。
  • 我已经尝试过了,但结果是它对数组进行排序,而不是对数组中的数组进行排序。
  • 请参阅粗体问题部分。这就是我要解决的问题。
【解决方案2】:

在使用custom sorting function 将数组拆分为其他数组之前对数组进行排序:

$arr2[0] = "100::HOMEDEPOT";
$arr2[1] = "200::WALMART";
$arr2[2] = "300::COSTCO";
$arr2[3] = "400::WALGREENS";
$arr2[4] = "500::TACO BELL";

//Split the input in place, you could also use a new array for this
for($i = 0;$i < count($arr2);$i++)
{
    $arr2[$i] = explode("::",$arr2[$i]);
}

//Define our new sorting function
function sort_second_item($a,$b)
{
    return strcmp($a[1],$b[1]);
}

var_dump($arr2);
usort($arr2,'sort_second_item');
var_dump($arr2);

$rotated = array();

//Rotate $arr2
for($i = 0; $i < count($arr2); $i++)
{
    for($j = 0;$j < count($arr2[$i]); $j++)
    {
        if(!isset($rotated[$j]))
        {
            $rotated[$j] = array();
        }
        $rotated[$j][$i] = $arr2[$i][$j];
    }
}
var_dump($rotated);

【讨论】:

  • 好的,你改变了问题的答案...不公平。
  • 如果您经常读取的数据有两个数组,则上面的代码将起作用。读取具有两个数组、三个数组、五个数组的数据怎么样?你怎么处理?您是否制作了一个函数来分别处理每个函数,或者我试图做的是创建一个可以通过动态创建变量来处理所有这些函数的函数。我遇到的问题是如何在不知道要发送多少的情况下将那些动态创建的变量发送到 multisort_array()。
猜你喜欢
  • 2016-04-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-17
  • 2017-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多