1

解决了。感谢所有通过答案或评论提供帮助的人,特别是那些花了几分钟用他们的代码输入一些书面解释的人,所以我实际上知道发生了什么:)

只是一些新手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

4 回答 4

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()用于降序。

于 2013-01-23T15:05:45.347 回答
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'];
}
于 2013-01-23T15:00:55.083 回答
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/>';
    }
}

演示:http ://codepad.viper-7.com/0Qegab

于 2013-01-23T15:04:28.850 回答
-1

您正确执行此操作的方式知道您只是将另一个数组插入到数组中。除非您不想真正将另一个数组添加到数组中,否则您将不得不省略围绕您的值的数组。

$sortingbyprice = array(
    $oneline[0],
    $oneline[1]
);
于 2013-01-23T14:56:45.957 回答