Получить значения строки, если другие строковые значения содержат да

if ( isset($_POST['figuresugsubjectposition'])) {
    $figuresubject_taxonomies = array( 'figuresugsubjectposition' => $_POST['figuresugsubjectposition']);
    $figuresubject_taxonomies_from = array( 'figuresugsubjectfrom' => $_POST['figuresugsubjectfrom']);
    foreach ( $figuresubject_taxonomies_from as $tax_name_from => $terms_from ) {
        $figuresubject_taxonomies_from = $terms_from;
    }
    //this will return: Blue, White, Green, Yellow, Black.. etc

    foreach ( $figuresubject_taxonomies as $tax_name => $terms ) {
        $figuresubject_taxonomies = $terms;
    }
    //this will return: yes, yes, no, yes, yes.. etc
}

Я хочу, чтобы $figuresubject_taxonomies_fnl имел только те цвета, у которых есть «да» во второй строке. В приведенном выше примере $figuresubject_taxonomies_fnl будет отображать: Blue, White, Yellow, Black... и т. д.


person nidaelias    schedule 23.08.2014    source источник


Ответы (1)


Если вы не возражаете против потери исходных ключей в массиве, вы можете сделать это:

<?php
$colours = array('black', 'orange', 'yellow');
$yes_no = array('yes', 'no', 'yes');

$combined = array_combine($colours, $yes_no);
$filtered = array_filter($combined, function($x) { return $x === 'yes'; });

$result = array_keys($filtered));

Теперь $result будет таким массивом:

Array
(
    [0] => black
    [1] => yellow
)

array_combined возвращает новый массив, состоящий из массива ключей (ваших цветов) и массива значений ("да" или "нет"). array_filter возвращает только те элементы, для которых функция обратного вызова возвращает true.

В качестве альтернативы вы можете просто использовать цикл:

$result = array();
for ($i = 0; $i < count($colours); ++$i) {
    if ($yes_no[$i] === 'yes') $result[] = $colours[$i];
}
person Tom Fenech    schedule 23.08.2014
comment
Спасибо. Я проверил первый способ. Это именно то, что я хотел. Я проверю другой метод и отвечу соответственно. - person nidaelias; 24.08.2014