【问题标题】:how to put variable in array()?如何将变量放入array()中?
【发布时间】:2013-01-07 02:21:05
【问题描述】:

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

只是一些新手 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/>";
    }
}

【问题讨论】:

  • 附带说明,如果您设置error_reporting(-1); ini_set('display_errors', 'On'),您会看到一些通知,上面写着"array to string conversion"
  • 如果您看到 Array 回显,这意味着您正在尝试将数组用作字符串。

标签: php arrays variables


【解决方案1】:

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

此代码没有:首先它遍历文件,使用以下格式将菜单项添加到关联数组中:$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() 用于降序排序。

【讨论】:

  • 另请注意,无需计算数组中的行数。 :-)
  • 在您的版本中,如何将排序顺序从最小更改为最大?我尝试使用不同的排序命令,但它们只是使名称消失。我认为我们还没有像这样研究它,但这似乎工作得很好。 :)
  • 似乎还是有问题。排序适用于 0-9,但当它达到 10+ 时,它就不再适用了。知道为什么不?
  • 当然。如果您使用arsort($sortingbyprice, SORT_NUMERIC),它将比较值作为数字,否则作为字符串。所以,我再次更新了我的答案。 :-)
【解决方案2】:

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

$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'];
}

【讨论】:

  • 这将修复回显值,但它不会帮助他对其进行排序。
  • @RocketHazmat 我没看到 array_multisort() 我的坏人。
【解决方案3】:

如果要对 整个 数组进行排序,则需要在 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

【讨论】:

    【解决方案4】:

    您正确的做法知道您只是将另一个数组插入到数组中。 除非您不想真正将另一个数组添加到数组中,否则您必须省略围绕值的数组。

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

    【讨论】:

    • 这将修复回显值,但它不会帮助他对其进行排序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多