2016-03-02 4 views
1

У меня есть коллекция объектов, которые имеют следующий видPHP - Отображение Флажок на основе определенных условий

#attributes: array:8 [▼ 
    "name" => "Something1" 
    "value" => "Some Data" 
] 

#attributes: array:8 [▼ 
    "name" => "Something1Test" 
    "value" => "Some Data" 
] 

#attributes: array:8 [▼ 
    "name" => "NOC M2" 
    "value" => "Some Data" 
] 

#attributes: array:8 [▼ 
    "name" => "Couldbeanything M3" 
    "value" => "Some Data" 
] 

#attributes: array:8 [▼ 
    "name" => "Couldbeanything M3Test" 
    "value" => "Some Data" 
] 

Если имя атрибута заканчивается тест, предшествующий объект связан с ним. Так, например, Something1Test относится к Something1. Первая часть всегда будет тем же «Something1», клонированная версия просто добавила Test к концу.

Я зацикливаю объекты и показываю их содержимое. То, что я пытаюсь сделать, это показать флажок для всех объектов, у которых нет связанного тестового объекта. На данный момент у меня есть что-то вроде этого

<?php if(strpos($data->name, 'Test') === false) { ?> 
    <div class="col-md-4"> 
     //Display a checkbox 
    </div> 
<?php } ?> 

Теперь это несколько работ в том смысле, что он отображает флажок для всех объектов, которые не имеют атрибут имени, который содержит Test. Таким образом, для приведенных выше данных, он отображает флажок для

Something1 
NOC M2 
Couldbeanything M3 

Проблема, которую я имею что Something1 и Couldbeanything имеют связанный объект испытаний, так что эти два не должны иметь флажок. С приведенными выше данными единственное, что должно иметь флажок, это NOC M2, потому что NOC M2Test отсутствует.

Есть ли способ достичь того, что я хочу? Первая часть названия может быть любой.

Благодаря

ответ

1

Я бы сначала собрать имена:

$names = array_column($objects, 'name'); 

выше предполагает вложенную структуру массива; вам может понадобиться, чтобы сделать что-то вроде этого, вместо:

$names = array(); 
foreach ($objects as $data) { 
    $names[] = $data->name; 
} 

Тогда я хотел бы выполнить следующую проверку:

// Must not end in Test and must not have a corresponding Test object 
if (substr($data->name, -4) != 'Test' && !in_array($data->name . 'Test', $names)) { 
    // do my output here 
} 
+0

Спасибо. Теоретически, $ objects - это Object, а не массив. Поэтому я не могу использовать array_column. Есть ли другой способ приблизиться к этому? –

+0

Я только что добавил для этого редактирование; предполагая, что '$ objects' является итерабельным, вы можете использовать' foreach'. – cmbuckley

Смежные вопросы