2017-02-10 6 views
0

多次元配列に指定された値があれば、それを入れ替えることができる必要があります。例えば配列内にある場合は置換する

$cars = array 
(
    array("Volvo", "Silver", "Silver Metallic"), 
    array("BMW", "Red", "Sunset Red") 
); 

Iは、オブジェクト内の次の値が与えられていた場合:

$myobject->make = "Volvo"; 
$myobject->color = "Silver Metallic"; 

Iは

を返すように、上記アレイを使用する必要がすべての方法を一緒に接続する方法がわかりません。

echo $cars[0][$myobject->make]... 

答えて

3
$cars = [ 
    ['Volvo', 'Silver', 'Silver Metallic'], 
    ['BMW', 'Red', 'Sunset Red'], 
]; 

$make = 'Volvo'; 
$color = 'Silver Metallic'; 

$result = NULL; 
foreach ($cars as $c) { 
    if ($c[0] === $make && $c[2] === $color) { 
    $result = $c[1]; 
    break; 
    } 
} 
if ($result !== NULL) { 
    echo "found color: ".$result; 
} 
+0

ニース!ありがとう。 – santa

0

この配列の設定方法によっては、あなたがあなたの例では、この

$key = array_search('Silver Metallic', array_column($cars, '2')); 

ような何かを行うことができ、$key0あるので、あなたはその後

echo 'Color is ' . $cars[$key][1]; 
ような何かを行うことができます

foreachと同様のスケーラビリティはありませんが、リこのようなデータのサブセット

+0

色が「シルバーメタリック」の2台の車があれば、これは必ずしも機能しません。 –

+1

私が言ったように、スケーラビリティはありません。あなたがここで何をしようとしているのかわからなくても、データの限られたサブセットに代わる方法です – Machavity

0

ここでは、検索データを関数として配列に渡し、空の文字列として1つのフィールドを残すことができます。'' ...関数は欠落フィールドを返します。

<?php 

$cars = array(
    array("Volvo", "Silver", "Silver Metallic"), 
    array("BMW", "Red", "Sunset Red") 
); 

function getSpecificValue($cars, $data) 
{ 
    foreach ($cars as $car) { 

     if ($data['make'] === '') { 
      if ($car[1] === $data['color'] && $car[2] === $data['color_name']) { 
       return $car[0]; 
      } 
     } elseif ($data['color'] === '') { 
      if ($car[0] === $data['make'] && $car[2] === $data['color_name']) { 
       return $car[1]; 
      } 
     } elseif ($data['color_name'] === '') { 
      if ($car[0] === $data['make'] && $car[1] === $data['color']) { 
       return $car[2]; 
      } 
     } 
    } 
} 

$data = [ 
    'make'  => 'BMW', 
    'color'  => 'Red', 
    'color_name' => '', 
]; 

$result = getSpecificValue($cars, $data); 

var_dump($result); 
関連する問題