PHP: если значение существует в массиве, присвойте новое значение и pu sh все значения новому массиву - PullRequest
0 голосов
/ 07 февраля 2020

Я хочу проверить, имеет ли массив JSON в базе данных значение. Каждое значение соответствует идентификатору категории WordPress. (Например, "elevator" = 120)
Если он существует, мне нужно поместить его sh в массив с именем $ features, чтобы позже я смог запустить скрипт, который создает пост WordPress, где находится этот массив существующих чисел (Идентификаторы) вставляются в сообщение, как показано в этом примере:

$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;
}

Ответы [ 3 ]

2 голосов
/ 07 февраля 2020

У вас здесь много чего нужно исправить. Во-первых, давайте предположим, что $options является довольно стандартным массивом:

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

Теперь вы настроили $features как массив для хранения результата:

$features = array();

Вы не можете сделать много оценки в switch заявлении. В утверждении in_array("basement", $options) && "basement" != false: вы пытаетесь выполнить два теста для «подвала», когда все, что вам нужно сделать, это позволить 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;
    }
}

Вот результаты :

print_r($features);

Что возвращает

Array
(
    [0] => 145
    [1] => 167
)
1 голос
/ 07 февраля 2020

Предполагая, что у вас есть список значений для параметров, вы можете создать массив с комбинацией параметров и значений. Затем используйте 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
)

Преимущество заключается в том, что когда / если вам нужно изменить отображение, вам нужно только обновить массив $optionValues.

1 голос
/ 07 февраля 2020

Вы можете достичь своей цели, используя 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: ...

, который не выполняет то, что вы намерены

...