如何将变量放入array()?

时间:2013-01-23 14:52:18

标签: php arrays variables

解决。感谢所有通过答案或评论帮助过它的人,尤其是那些花了几分钟在他们的代码中输入一些书面解释的人,所以我实际上得到了正在发生的事情:)

只是一些新手php问题。我在解决如何使其工作方面遇到了麻烦。基本上我只是想按价格对菜单进行排序,其中只包括名称和价格。

Menu.txt看起来像这样:

Meat,1
Salad,3
Juice,2

但是在运行程序之后,它回应了:

Array Array
Array Array
Array Array

我希望打印出像:

Meat,1
Juice,2
Salad,3

这让我觉得我不能在array()中使用变量,所以我想知道我应该怎么做呢?代码在下面,其他一切在我的程序中运行良好,除了按价格排序(如果我只打印.txt文件而不尝试排序就好了等等。)

<?php
if (file_exists("menu.txt"))
{
    $lines = file("menu.txt");
    $howmanylines = count($lines);
    for($i=0; $i < $lines; $i++) {
        $oneline = explode(",",$lines[$i]);
        $name = $oneline[0];
        $price = $oneline[1];
        $sortingbyprice = array(
            array($name),
            array($price)
        );
        array_multisort($sortingbyprice[0], $sortingbyprice[1], SORT_NUMERIC, SORT_ASC);
        echo $sortingbyprice[0] . " ";
        echo $sortingbyprice[1] . "<br/>";
    }
}

4 个答案:

答案 0 :(得分:2)

每次在数组中输入新值时,您都会将数组输入到数组中并进行排序。

此代码不会:首先迭代文件,使用以下格式将菜单项添加到关联数组:$sortingbyprice[product] = price。然后它对数组进行排序并循环遍历排序的数组,生成输出(当然,可以根据需要进行更改)。

升序顺序排序:

<?php
if (file_exists("menu.txt"))
{
    $lines = file("menu.txt");
    $sortingbyprice = array();

    foreach ($lines as $line)
    {
        $oneline = explode(",", $line);
        $sortingbyprice[$oneline[0]] = $oneline[1];
    }

    // Sort the array, maintaining key associations.
    asort($sortingbyprice, SORT_NUMERIC);

    foreach ($sortingbyprice as $product=>$price)
    {
        echo $product." ".$price."<br />";
    }
}
?>

如果您想按降序顺序排序,可以使用

    // Sort the array, maintaining key associations.
    arsort($sortingbyprice, SORT_NUMERIC);

简而言之:asort()用于提升排序,arsort()用于降序排序。

答案 1 :(得分:0)

将数据放入数组时出错。这是正确的方法:

$sortingbyprice[] = array('name'=>$oneline[0],'price'=>$oneline[1]);
//then to 'echo' a value within the array:
echo $sortingbyprice['name'];

做你能做到的每一条记录:

foreach($sortingbyprice as $price){
    echo $price['name'].': £'.$price['price'];
}

答案 2 :(得分:0)

如果要对整个数组进行排序,则需要在for循环之外执行此操作。您需要使用循环将文件解析为数组,但是您需要在循环外对其进行排序(使用usort)。

您只是在阅读时对数组中的每个元素进行排序。您不是将它们与其他元素进行比较,因此array_multisort实际上并没有做任何事情。

<?php
if (file_exists("menu.txt")) {
    // Create the array outside the loop
    $sortingbyprice = array();

    $lines = file("menu.txt");
    $howmanylines = count($lines);

    // Note we're using $howmanylines here
    for($i=0; $i < $howmanylines; $i++) {
        // add each row to the array
        $sortingbyprice[] = explode(",", $lines[$i]);
    }

    // Sort the array by its price
    usort($sortingbyprice, function($a, $b){
        return $a[1] - $b[1];
    });

    // echo the array
    for($i=0; $i < $howmanylines; $i++) {
      $row = $sortingbyprice[$i];
      echo $row[0].' '.$row[1].'<br/>';
    }
}

DEMO:http://codepad.viper-7.com/0Qegab

答案 3 :(得分:-1)

你正确行事的方式知道你只是在数组中插入另一个数组。 除非你不想在阵列中真正添加另一个数组,否则你必须省略围绕你的值的数组。

$sortingbyprice = array(
    $oneline[0],
    $oneline[1]
);