2016-03-02 110 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" 
] 

如果name屬性與測試結束,前面的目標是有關它的對象的集合。因此,例如Something1Test與Something1相關。第一部分將始終是相同的「Something1」,克隆版本只是將Test添加到最後。

我正在循環我的對象並顯示它們的內容。我想要做的是顯示所有沒有相關測試對象的對象的複選框。目前,我有這樣的事情

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

現在這個有些工作在某種意義上說,它顯示爲沒有一個name屬性包含測試的所有對象複選框。因此,對於上述數據,它會顯示一個複選框

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

感謝。理論上,$對象是一個對象,而不是一個數組。因此,我真的不能使用array_column。有另一種方法來解決這個問題嗎? –

+0

我剛剛添加了一個編輯;假設'$ objects'是可迭代的,你可以使用'foreach'。 – cmbuckley