2017-04-21 27 views
0

功能搜尋所有導航項目:替代array_column用作搜索

$navitems_locations_array = array_unique(array_column($projects, 'location')); 
asort($navitems_locations_array); 

這工作在我的本地但不能直播。我的服務器不支持它。我正在使用較低版本的PHP。

這是錯誤:

Fatal error: Call to undefined function array_column()

與相同輸出的任何替代方案?

這裏是我的樣品arrray名單:

Array([ name ] => P1 [ description ] => Lorem Ipsum [ location ] => air city[ type ] => high rise[ status ] => new [ tags ] => [ page_url ] => project-1[ image ] => projects/images/p1/project-image.jpg[ timeline ] =>)

+0

你可以在你的帖子中分享你的'print_r($ projects)'嗎? –

+0

在'$ projects'中你有多個這樣的數組嗎? –

回答

0

添加您自己的功能array_column,如果你的PHP版本不支持它:

if (!function_exists('array_column')) { 
function array_column($input = null, $columnKey = null, $indexKey = null) 
{ 
    $argc = func_num_args(); 
    $params = func_get_args(); 

    if ($argc < 2) { 
     trigger_error("array_column() expects at least 2 parameters, {$argc} given", E_USER_WARNING); 
     return null; 
    } 

    if (!is_array($params[0])) { 
     trigger_error(
      'array_column() expects parameter 1 to be array, ' . gettype($params[0]) . ' given', 
      E_USER_WARNING 
     ); 
     return null; 
    } 

    if (!is_int($params[1]) 
     && !is_float($params[1]) 
     && !is_string($params[1]) 
     && $params[1] !== null 
     && !(is_object($params[1]) && method_exists($params[1], '__toString')) 
    ) { 
     trigger_error('array_column(): The column key should be either a string or an integer', E_USER_WARNING); 
     return false; 
    } 

    if (isset($params[2]) 
     && !is_int($params[2]) 
     && !is_float($params[2]) 
     && !is_string($params[2]) 
     && !(is_object($params[2]) && method_exists($params[2], '__toString')) 
    ) { 
     trigger_error('array_column(): The index key should be either a string or an integer', E_USER_WARNING); 
     return false; 
    } 

    $paramsInput = $params[0]; 
    $paramsColumnKey = ($params[1] !== null) ? (string) $params[1] : null; 

    $paramsIndexKey = null; 
    if (isset($params[2])) { 
     if (is_float($params[2]) || is_int($params[2])) { 
      $paramsIndexKey = (int) $params[2]; 
     } else { 
      $paramsIndexKey = (string) $params[2]; 
     } 
    } 

    $resultArray = array(); 

    foreach ($paramsInput as $row) { 
     $key = $value = null; 
     $keySet = $valueSet = false; 

     if ($paramsIndexKey !== null && array_key_exists($paramsIndexKey, $row)) { 
      $keySet = true; 
      $key = (string) $row[$paramsIndexKey]; 
     } 

     if ($paramsColumnKey === null) { 
      $valueSet = true; 
      $value = $row; 
     } elseif (is_array($row) && array_key_exists($paramsColumnKey, $row)) { 
      $valueSet = true; 
      $value = $row[$paramsColumnKey]; 
     } 

     if ($valueSet) { 
      if ($keySet) { 
       $resultArray[$key] = $value; 
      } else { 
       $resultArray[] = $value; 
      } 
     } 

    } 

    return $resultArray; 
} 

} 

Reference:

+0

謝謝!它運作良好。 –

1

試試這個,希望它會幫助你。這裏我們使用array_map來收集位置。

$locations=array(); 

array_map(function($value) use (&$locations) { 
    $locations[]=$value["location"];//we are gathering index location 
}, $yourArray);//add your array here in place of $yourArray. 

print_r(array_unique($locations)); 
+0

@ c.k現在檢查我的帖子。我剛剛給了'array_column'的替代方法,其餘的代碼將保持不變,您必須爲此使用'array_unique'。 –

+0

什麼是適當的方式來編碼它與asort函數回聲? –

+0

@ c.k你能分享你正在使用的代碼嗎? –

0

它通常是有用的信息用戶提供人說明PHP Manual

例如,在array_column文章下方,針對低於PHP 5.5版本的實現有幾種變體。這裏是the most popular one

if(!function_exists("array_column")) 
{ 

    function array_column($array,$column_name) 
    { 

     return array_map(function($element) use($column_name){return $element[$column_name];}, $array); 

    } 

} 

但它不支持$index_key,所以你可以找到another one有,這確實:

if (!function_exists('array_column')) { 
    function array_column($input, $column_key, $index_key = null) { 
     $arr = array_map(function($d) use ($column_key, $index_key) { 
      if (!isset($d[$column_key])) { 
       return null; 
      } 
      if ($index_key !== null) { 
       return array($d[$index_key] => $d[$column_key]); 
      } 
      return $d[$column_key]; 
     }, $input); 

     if ($index_key !== null) { 
      $tmp = array(); 
      foreach ($arr as $ar) { 
       $tmp[key($ar)] = current($ar); 
      } 
      $arr = $tmp; 
     } 
     return $arr; 
    } 
} 

你可以找到一對情侶在用戶投稿注意事項更多的選擇。