我有以下数组:
Array
(
[0] => Array
(
[id] => 1
[price1] => 16
[price2] => 10
[price3] => 3
)
[1] => Array
(
[id] => 2
[price1] => 19
[price2] => 2
[price3] => 6
)
[2] => Array
(
[id] => 3
[price1] => 14
[price2] => 32
[price3] => 1
)
)
我想从每一行获得与其他行无关的较低价格。例如,对于id=1
,较低的价格为3
,对于id=2
,较低的价格为2
,依此类推。任何想法如何自动化。
答案 0 :(得分:1)
可能的解决方案:
foreach($array as $item)
{
$lowestKey = '';
foreach($item as $key => $value)
{
if(strpos($key, 'price') === 0)
{
if($lowestKey == '')
{
$lowestKey = $key;
}
else
{
if($value < $item[$lowestKey])
{
$lowestKey = $key;
}
}
}
}
echo 'lowest for id ' . $item['id'] . ': ' . $item[$lowestKey];
}
这种方法的好处是:
price
开头的密钥都会被视为价格。description
密钥,则不会影响代码或需要进行任何修改。答案 1 :(得分:0)
试试这个:
$newarray = array();
foreach ($array as $row)
{
$id = $row['id'];
unset($row['id']);
$newarray[$id] = min($row);
}
你去吧。 $newarray
现在包含每行的id => {lowest value}
。
答案 2 :(得分:0)
$r = array_reduce($array, function(&$result, $item) {
$key = $item['id'];
unset($item['id']);
$result[$key] = min($item);
return $result;
});
答案 3 :(得分:0)
尝试以下方法:
$prices = array(0 => array ( 'id' => 1,
'price1' => 16,
'price2' => 10,
'price3' => 3
),
1 => array ( 'id' => 2,
'price1' => 19,
'price2' => 2,
'price3' => 6
),
2 => array ( 'id' => 3,
'price1' => 14,
'price2' => 32,
'price3' => 1
)
);
foreach($prices as $price) {
$tmp_arr = array(0=> $price['price1'], 1=> $price['price2'], 2=> $price['price3']);
sort($tmp_arr);
$arr_low_price = array('id'=> $price['id'], 'low_price' => $tmp_arr[0]);
print_r($arr_low_price);
echo '<br />';
}
答案 4 :(得分:-1)
尝试可能有所帮助:
$price = array();
foreach( $array as $key=>$each ){
$low = $each['price1'];
if( $each['price2'] < $low ){
$low = $each['price2'];
}
if( $each['price3'] < $low ){
$low = $each['price3'];
}
$price[$key] = $low;
}
print_r( $price );