0

表示する配列の値を制限する方法を知りたいです。$colormyが等しいと仮定するとIndigo

このコードを実装しようとしましたが、うまくいきません

foreach($data as $item){
    if($item['color'] == $color){
        echo $item['size'].'-'.$item['color'].'-'.$item['price'].'<br>';
    }
}

そして、私if statementvar_dump($data)

    array(16) {
  [0]=>
  array(3) {
    ["size"]=>
    string(1) "2"
    ["price"]=>
    string(6) "$59.00"
    ["color"]=>
    string(11) "Black Rinse"
  }
  [1]=>
  array(3) {
    ["size"]=>
    string(1) "2"
    ["price"]=>
    string(6) "$59.00"
    ["color"]=>
    string(6) "Indigo"
  }
  [2]=>
  array(3) {
    ["size"]=>
    string(1) "4"
    ["price"]=>
    string(6) "$59.00"
    ["color"]=>
    string(11) "Black Rinse"
  }
  [3]=>
  array(3) {
    ["size"]=>
    string(1) "4"
    ["price"]=>
    string(6) "$59.00"
    ["color"]=>
    string(6) "Indigo"
  }
  [4]=>
  array(3) {
    ["size"]=>
    string(1) "6"
    ["price"]=>
    string(6) "$59.00"
    ["color"]=>
    string(11) "Black Rinse"
  }
  [5]=>
  array(3) {
    ["size"]=>
    string(1) "6"
    ["price"]=>
    string(6) "$59.00"
    ["color"]=>
    string(6) "Indigo"
  }
  [6]=>
  array(3) {
    ["size"]=>
    string(1) "8"
    ["price"]=>
    string(6) "$59.00"
    ["color"]=>
    string(11) "Black Rinse"
  }
  [7]=>
  array(3) {
    ["size"]=>
    string(1) "8"
    ["price"]=>
    string(6) "$59.00"
    ["color"]=>
    string(6) "Indigo"
  }
  [8]=>
  array(3) {
    ["size"]=>
    string(2) "10"
    ["price"]=>
    string(6) "$59.00"
    ["color"]=>
    string(11) "Black Rinse"
  }
  [9]=>
  array(3) {
    ["size"]=>
    string(2) "10"
    ["price"]=>
    string(6) "$59.00"
    ["color"]=>
    string(6) "Indigo"
  }
  [10]=>
  array(3) {
    ["size"]=>
    string(2) "12"
    ["price"]=>
    string(6) "$59.00"
    ["color"]=>
    string(11) "Black Rinse"
  }
  [11]=>
  array(3) {
    ["size"]=>
    string(2) "12"
    ["price"]=>
    string(6) "$59.00"
    ["color"]=>
    string(6) "Indigo"
  }
  [12]=>
  array(3) {
    ["size"]=>
    string(2) "14"
    ["price"]=>
    string(6) "$59.00"
    ["color"]=>
    string(11) "Black Rinse"
  }
  [13]=>
  array(3) {
    ["size"]=>
    string(2) "14"
    ["price"]=>
    string(6) "$59.00"
    ["color"]=>
    string(6) "Indigo"
  }
  [14]=>
  array(3) {
    ["size"]=>
    string(2) "16"
    ["price"]=>
    string(6) "$59.00"
    ["color"]=>
    string(11) "Black Rinse"
  }
  [15]=>
  array(3) {
    ["size"]=>
    string(2) "16"
    ["price"]=>
    string(6) "$59.00"
    ["color"]=>
    string(6) "Indigo"
  }
}

色が に等しい値のみを表示したい$color。これを正しい方法で行うにはどうすればよいですか?

4

3 に答える 3

2

大文字と小文字の区別や空白を扱っている可能性があります..試すことができます:

$data = array(
        0 => array("size" => "2","price" => "$59.00","color" => "Black Rinse"),
        1 => array("size" => "2","price" => "$59.00","color" => "Indigo"));


$color = "Indigo";
foreach ( $data as $item ) {
    if (strtolower($item['color']) == strtolower($color)) {
        echo $item['size'] . '-' . $item['color'] . '-' . $item['price'] . '<br>';
    }
}

出力

2-Indigo-$59.00

ライブデモを見る

于 2012-10-17T00:50:42.503 に答える
1

エレガントに、シンプルに:

    $items = array(
        array('size'=>'4', 'color'=>'Indigo', 'price'=>'$59.00'), 
        array('size'=>'5', 'color'=>'black', 'price'=>'$59.00'), 
        array('size'=>'5', 'color'=>'green', 'price'=>'$54.00'),
        array('size'=>'7', 'color'=>'Indigo', 'price'=>'$50.00'),
        array('size'=>'5', 'color'=>'purple', 'price'=>'$51.00'));

   print_r(array_filter($items, function($i){
          return in_array('Indigo', $i);
      })
   );

またはPHP<5.3:

print_r(array_filter($items, 
    create_function('$i', 'return in_array("Indigo", $i);'))
);

PHPが提供する機能を活用してください。

于 2012-10-17T01:17:04.247 に答える
1

これで問題が解決するはずです(2つの文字列を比較していると仮定すると、ifループで大文字と小文字を区別しない文字列比較にstrcasecmp-を使用することをお勧めします)

foreach($data as $item){
    if(strcasecmp(trim($item['color']),trim($color))==0){
        echo $item['size'].'-'.$item['color'].'-'.$item['price'].'<br>';
    }
}
于 2012-10-17T00:51:03.557 に答える