如果在数组中替换

时间:2017-02-10 19:26:56

标签: php

如果它们存在于多维数组中,我需要能够交换给定的值。

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

例如,如果我在对象中给出以下值:

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

我需要使用上面的数组返回

  

不确定如何将它们全部插入。

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

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

根据此阵列的设置方式,您可以执行类似这样的操作

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

在您的示例中,$key0,因此您可以执行类似

的操作
echo 'Color is ' . $cars[$key][1];

不像foreach那样具有可扩展性,但它可以用于像这样的有限数据子集

答案 2 :(得分:0)

在这里,您可以将搜索数据作为数组传递给函数,并将任何一个字段保留为空字符串'' ...函数将返回缺少的字段。

<?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);