解决。感谢所有通过答案或评论帮助过它的人,尤其是那些花了几分钟在他们的代码中输入一些书面解释的人,所以我实际上得到了正在发生的事情:)
只是一些新手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/>";
}
}
答案 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);
答案 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/>';
}
}
答案 3 :(得分:-1)
你正确行事的方式知道你只是在数组中插入另一个数组。 除非你不想在阵列中真正添加另一个数组,否则你必须省略围绕你的值的数组。
$sortingbyprice = array(
$oneline[0],
$oneline[1]
);