Php 返回最小数组值索引

Php 返回最小数组值索引,php,Php,我试图比较3种不同的数组价格,以找到最低的,这样我就可以决定哪些数组值应该输入到数据库,代码看起来像这样的时刻 $array_a = array( "id" => 398, "price" => 100 ); $array_b = array( "id" => 387, "price" => 60 ); $array_c = array( "id" => 127, "price" => 50 );

我试图比较3种不同的数组价格,以找到最低的,这样我就可以决定哪些数组值应该输入到数据库,代码看起来像这样的时刻

$array_a = array(
   "id"    => 398,
   "price" => 100 
);

$array_b = array(
   "id"    => 387,
   "price" => 60
);

$array_c = array(
   "id"    => 127,
   "price" => 50
);

if($array_a && $array_b && $array_c){
   $newArr = array($array_a['price'], $array_b['price'], $array_c['price']);
   array_keys($newArr, min($newArr));
   print_r($newArr)."\n"; 
}
上面的代码没有返回具有最低价格的数组的正确索引,在本例中为2(array_c),找到最低值的键的正确方法是什么


还有什么最好的方法可以确保只将数字与min()函数进行比较,而不是与字符串进行比较?

您可以通过以下方式实现自动化,例如:

$newArr = array($array_a['price'], $array_b['price'], $array_c['price']);
asort($newArr, SORT_NUMERIC);
echo "Minimum: ".reset($newArr).", given in array #".key($newArr);
我不太确定如何回答你的最后一个问题——如果这些值实际上不是以数字形式输入的,会发生什么

更新:这里有一种排除非数值的方法:

asort($newArr, SORT_NUMERIC);
while (!is_numeric(current($newArr))) next($newArr);
if (key($newArr) === null) {
    echo "No valid elements found";
}
else {
    echo "Minimum: ".current($newArr).", given in array #".key($newArr);
}

例如,您可以通过以下方式实现自动化:

$newArr = array($array_a['price'], $array_b['price'], $array_c['price']);
asort($newArr, SORT_NUMERIC);
echo "Minimum: ".reset($newArr).", given in array #".key($newArr);
我不太确定如何回答你的最后一个问题——如果这些值实际上不是以数字形式输入的,会发生什么

更新:这里有一种排除非数值的方法:

asort($newArr, SORT_NUMERIC);
while (!is_numeric(current($newArr))) next($newArr);
if (key($newArr) === null) {
    echo "No valid elements found";
}
else {
    echo "Minimum: ".current($newArr).", given in array #".key($newArr);
}
你可以做:

$newArr = array($array_a['price'], $array_b['price'], $array_c['price']);
sort($newArr);
$lowest = array_shift($newArr);
你可以做:

$newArr = array($array_a['price'], $array_b['price'], $array_c['price']);
sort($newArr);
$lowest = array_shift($newArr);
试试这个:

$keys = array_keys($your_array);
asort($keys);
$min = $keys[0];
echo "Smallest index: ".$min;
试试这个:

$keys = array_keys($your_array);
asort($keys);
$min = $keys[0];
echo "Smallest index: ".$min;



仔细查看文档示例
echo min('hello',0)
会打印出“hello”,这是我不想要的@可以。但你仍然没有说出你想要什么。“我希望在搜索中根本不考虑非数值”是一个很好的答案。“我希望在搜索中根本不考虑非数值”仔细查看文档示例
echo min('hello',0)
会打印出“hello”,这是我不想要的@可以。但你仍然没有说出你想要什么。“我希望在搜索中根本不考虑非数值”是一个很好的答案。“我希望在搜索中根本不考虑非数值”这将返回
严格的标准:只有变量应该通过引用传递
@Baba是的,有一个错误,它已经在我的答案中修复。这将返回
严格的标准:只有变量应该通过引用传递
@Baba是的,有一个错误,它已经在我的答案中修复。