簡體   English   中英

PHP - 獲取在多個索引中具有值的鍵

[英]PHP - Get the key that has a value in multiple indexes

我有以下數組:

$myArray = [
   [
     "name" => null,
     "price" => [
         "height" => 0.0098974902792506,
         "left" => 0.8385,
         "page" => 1,
         "top" => 0.51290208554259,
         "width" => 0.0275,
     ],
   ],
   [
     "name" => null
     "price" => [
         "height" => 0.0098974902792506,
         "left" => 0.838,
         "page" => 1,
         "top" => 0.56981265464829,
         "width" => 0.028,
     ]
   ],
   [
     "name" => null
     "price" => [
         "height" => 0.010250972074938,
         "left" => 0.5905,
         "page" => 1,
         "top" => 0.44114528101803,
         "width" => 0.0285,
     ]
   ]
];

我正在嘗試檢查數組並獲取每個數組中具有值(不是null )的的名稱。 在上面的示例中,這將是price

但是,數組也可能如下所示:

[
   [
     "name" => null,
     "price" => [
         "height" => 0.0098974902792506,
         "left" => 0.8385,
         "page" => 1,
         "top" => 0.51290208554259,
         "width" => 0.0275,
     ],
   ],
   [
     "name" => null
     "price" => null
   ],
   [
     "name" => null
     "price" => null
   ]
]

在這種情況下,沒有一個數組鍵在所有 arrays 中都有值。

以下是我實現這一目標的嘗試:

$originalKeyWithValue = null;
foreach($myArray as $key => $item)
{

  $originalKeyWithValue = array_key_first($item);
  if (isset($myArray[$key+1])) {
    $nextKeyWithValue = array_key_first($myArray[$key+1]);
  
    if($originalKeyWithValue != $nextKeyWithValue){
        $originalKeyWithValue = $nextKeyWithValue;
    }
    
  } 
}
return $originalKeyWithValue;

然而,上面的代碼返回name作為鍵,即使它在$myArray中的所有null中都是 null 。

這就是我要做的:

// I take first element of array as a source for indexes
foreach ($myArray[0] as $index => $item) {
    // next I extract all elements from all subarrays under current `$index`
    $values = array_column($myArray, $index);
    // then I filter values to remove nulls. 
    // This also removes 0, empty arrays, false, 
    // so maybe you should change filter process
    $values_filtered = array_filter($values);
    // if number of filtered items is same as in original array - no nulls found
    if (count($values_filtered) === count($values)) {
        echo $index;
        // optionally
        // break; 
    }
}

盡管有一個公認的答案,但我想我會分享一種使用 Laravel collections 的方法。

 $uniqueKeysWithValues = collect($myArray)->map(function($item){
    return array_keys( collect($item)->filter()->toArray() ); //filter will remove all null
 })->flatten()->unique();

這種方法將為您提供所有具有值的鍵,即使兩個鍵中都有值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM