сравнивая значения двух массивов в php - PullRequest
2 голосов
/ 28 января 2010

у меня есть два массива, ключи которых являются идентификатором книги (61, 78, ... и т. Д.)

(1) book_width
     (
        [61] => 8.3
        [72] => 8286.1
        [78] => 6.4
        [100] => 8407.0
        [102] => 0.7
     )

(2) book_height
   (
    [61] => 9.00
    [72] => 150
    [78] => 8.00
    [100] => 150
    [102] => 3.00
  )

теперь я хочу массив, содержащий идентификаторы тех книг, чья высота больше или равна их ширине

означает, что мне нужно упомянуть массив ниже

(2) book_dimension
       (     
 /*book id*/ [78] => 8.00 //along their height or width(anyone)
             [102] => 3.00
      )



 or only book id in a new array
    (2) book_dimension
           (     
            [0] => 78
            [1] => 102
      )

Ответы [ 4 ]

3 голосов
/ 28 января 2010

Я считаю, что это должно сделать это:

function compare_dimensions( $width, $height )
{
 return $height < $width;
}

$result = array_uintersect_assoc( $array_width, $array_height, 'compare_dimensions' );

var_dump( $result );

EDIT:
Упс: сравнение должно быть наоборот. (изменено> = на <) </p>

документация: http://docs.php.net/array_uintersect_assoc

1 голос
/ 28 января 2010

Это не было проверено или скомпилировано, я все еще на работе с вашего предыдущего вопроса.

Я добавил два подхода, которые вы можете использовать, в зависимости от желаемого типа массива.

$book_dimension = array(); //contents to be added

foreach($book_height as $heightKey => $heightValue) {
      foreach($book_width as $widthKey => $widthValue) {
          // if height is greater than or equal to width
        if ($heightValue >= $widthValue) {

          // would return: $book_dimension[78] => "8.00"
          $book_dimension[$heightKey] = $heightValue;

          // or this approach, which will return: $book_dimension[0] => 78
          $book_dimension[] = $heightKey;

        }
    }
}
0 голосов
/ 28 января 2010

Давайте предположим, что вам действительно нужно сделать это в php. В настоящее время у вас есть два отдельных массива, возможно, вы можете что-то с этим сделать и сохранить данные вместе (чтобы каждый элемент массива описывал один элемент / книгу).

$w = array(61 => 8.3, 72 => 8286.1, 78 => 6.4, 100 => 8407.0, 102 => 0.7);
$h = array(61 => 9.00,  72 => 150, 78 => 8.00,  100 => 150, 102 => 3.00);
$dimensions = array();
foreach($w as $key=>$width) {
  $dimensions[$key] = array('width'=>$width, 'height'=>$h[$key]);
}

Теперь, имея только один массив, вы можете использовать array_filter () , чтобы отфильтровать все ненужные элементы.

например. с php 5.3:

$result = array_filter($dimensions, function($x) { return $x['height']>=$x['width']; });
print_r($result);

в предыдущих версиях (которые не поддерживают анонимные функции этого типа):

function heightGreateOrEqualWidth($x) {
  return $x['height']>=$x['width'];
}
$result = array_filter($dimensions, 'heightGreateOrEqualWidth');
print_r($result);
0 голосов
/ 28 января 2010

попробуйте, я не проверял:

<?php

$book_width = array( 61 => 8.3,72 => 8286.1,78 => 6.4,100 => 8407.0,102 => 0.7);
$book_height = array(61 => 9.00, 72 => 150, 78 => 8.00, 100 => 150, 102 => 3.00);
$result = array();
foreach($book_height as $k => $v)
{
    if($v >= $book_width[$k])
    {
       $result[$k] = max($book_width[$k], $v);
    }
}

var_dump($result);

p.s. Изменен код для соответствия условию высоты. Я проверял это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...