PHP:如果数组中存在值,则分配一个新值并将所有值推送到一个新数组

PHP: If value exists in array, assign a new value and push all values to a new array

我想检查数据库中的 JSON 数组是否有值。每个值都对应一个 WordPress 类别 ID。 (例如,"elevator" = 120)
如果它确实存在,我需要将它推送到一个名为 $features 的数组,以便稍后 运行 创建 WordPress post 的脚本,其中将现有数字 (ID) 的数组插入到 post,在这个例子中像这样:

$my_post = array(
'post_title'    => $post_title,
'tax_input'    => array(
               'property_category' => array( $features )

主要代码(我知道我可能还差得远):

$options = explode(",",$db->options); 
$features = array();

        switch ($features) {
    case in_array("basement", $options) && "basement" != false:
        array_push($features,145);
        break;
    case (in_array("bathtub", $options) && "bathtub" != false):
        array_push($features,167);
        break;
    case (in_array("boiler", $options) && "boiler" != false):
        array_push($features,105);
        break;
}

您可以使用 if 而不是 switch

来实现您的目标
if (in_array("basement", $options)) {
    array_push($features,145);
}
if (in_array("bathtub", $options)) {
    array_push($features,167);
}
if(in_array("boiler", $options)) {
    array_push($features,105);
}

因为 switch 语句的计算结果,例如

switch ([]) {
   case true: ...
   case false: ...
   case true: ...

这与您的意图不符

您这里有很多问题需要解决。首先,我们假设 $options 是一个相当标准的数组:

$options = ['basement', 'bathtub'];

现在您将 $features 设置为一个数组来保存结果:

$features = array();

您不能在 switch 语句中进行大量计算。在语句 in_array("basement", $options) && "basement" != false: 中,您尝试对 "basement" 进行两次测试,而您需要做的只是让 switch 决定信息是否存在。只需测试每个价值购买循环选项并测试价值

foreach($options as $option) {
    switch ($option) {
        case "basement":
            array_push($features,145);
            break;
        case "bathtub":
            array_push($features,167);
            break;
        case "boiler":
            array_push($features,105);
            break;
    }
}

这里是 results:

print_r($features);

哪个returns

Array
(
    [0] => 145
    [1] => 167
)

假设您有一个选项值列表,您可以创建一个包含选项和值组合的数组。然后使用 array_intersect_key() 仅匹配所选的选项(使用 array_flip() 使选项值成为键。最后使用 array_values() 删除键...

$options = ['basement', 'bathtub'];
$optionValues = ['basement' => 145, 'bathtub' => 167, 'boiler' => 105];

$features = array_values(array_intersect_key($optionValues, array_flip($options)));

print_r($features);

给...

Array
(
    [0] => 145
    [1] => 167
)

这样做的好处是when/if你需要改变映射,你只需要更新$optionValues数组。