Автоудаление Макс / Мин из массива при создании - PullRequest
3 голосов
/ 12 декабря 2011

Обновлен код, который создает массив, но не выводит значения min / max. Почему это не работает и как заставить его автоматически удалять значение min / max и затем повторно выводить массив?

<code><?php 
$url = 'https://www.googleapis.com/shopping/search/v1/public/products?key=thekey&country=US&q=nintendo+wii';

$data = curl_init($url);
curl_setopt($data, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($data, CURLOPT_HEADER, 0);

$product_result = curl_exec($data);
curl_close($data);


$arr = json_decode($product_result, true);
$prices = array();

echo "Original Values";

foreach ($arr['items'] as $item)
{
    if (isset($item['product']['inventories'][0]['price']))
    {
        $prices[] = $item['product']['inventories'][0]['price'];
    }
}


echo '<pre>';
print_r($prices);
echo '<br /><br />';

// Get the values
$min = $prices[$minIndex];
$max = $prices[$maxIndex];

// Find the values
$minIndex = array_search($min, $prices);
$maxIndex = array_search($max, $prices);

#print out results with no min/max pair
echo $prices[$min] . 'max is ' . $prices[$max];
echo '
'; // Сбросить значения unset (цены $ [$ minIndex], цены $ [$ maxIndex]); ?>

Текущий вывод кода, который не показывает минимальное / максимальное значение:

Original Values
Array
(
    [0] => 149.99
    [1] => 149.99
    [2] => 149.99
    [3] => 209.95
    [4] => 124.99
    [5] => 225.99
    [6] => 149.96
    [7] => 249.99
    [8] => 193.99
    [9] => 149.99
    [10] => 149.99
    [11] => 149.99
    [12] => 326.99
    [13] => 269.96
    [14] => 258.99
    [15] => 129.99
    [16] => 149.99
    [17] => 39.99
    [18] => 149.99
    [19] => 209.99
    [20] => 349.95
    [21] => 357.38
    [22] => 169.96
    [23] => 125
    [24] => 149.99
)


max is 

Ответы [ 3 ]

1 голос
/ 12 декабря 2011

На основании unset и array_search от php.net, это должно работать:

// Find the values
$minIndex = array_search($minVal, $prices);
$maxIndex = array_search($maxVal, $prices);

// Get the values
$min = $prices[$minIndex];
$max = $prices[$maxIndex];

// Unset the values
unset($prices[$minIndex], $prices[$maxIndex]);

// Print out values
echo 'min value: '.$min;
echo 'max value: '.$max;

// Print full array
print_r($prices);
0 голосов
/ 12 декабря 2011

$minVal и $maxVal не определены до вызова поиска в массиве.

// Find the values
$minIndex = array_search($minVal, $prices);
$maxIndex = array_search($maxVal, $prices);

И array_search не находит никакого значения. Он находит ключи: Возвращает ключ для иглы, если он найден в массиве, иначе FALSE.

$minIndex равно FALSE, а $maxIndex также равно FALSE.

Значения также неверны ...

// Get the values
$min = $prices[$minIndex]; // $min = $prices[FALSE]
$max = $prices[$maxIndex]; // $max = $prices[FALSE]

Возможное решение:

$minValue = FALSE;
$maxValue = 0;
foreach ($arr['items'] as $item) {
    if (isset($item['product']['inventories'][0]['price']) !== false) {
        $price = $item['product']['inventories'][0]['price'];
        $prices[] = $price;
        if ( ! $minValue || $minValue < $price) {
            $minValue = $price;
        }
        if ($price > $maxValue) {
            $maxValue = $price;
        }
    }
}

Помимо

if (isset($item['product']['inventories'][0]['price']) !== false) { ... }

является избыточным тестом. Это точно так же, как

if (isset($item['product']['inventories'][0]['price'])) { ... }
0 голосов
/ 12 декабря 2011

Вы можете отсортировать массив в числовом порядке, а затем использовать array_pop () и array_shift ()

<code>  sort($prices,SORT_NUMERIC);
  $maxval    = array_pop($prices);
  $minval    = array_shift($prices);

  $avgofval  = (count($prices))
                 ? array_sum($prices)/count($prices)
                 : 0;

  echo "min is ". $minval . "<br>Max is ". $maxval . "<br />avg is " . $avgofval ;
  echo '<pre>'.print_r($prices,1).'
';
...