3 回答
TA贡献1875条经验 获得超5个赞
如果您的数组始终相同(键 2 始终 === first_name 和键 3 始终 === last_name),您可以使用数组表示法来停止错误:
$user = User::where('first_name', 'LIKE', "%".$array[2]."%")->where('last_name', 'LIKE', "%".$array[3]."%")->first();
但是您已经说过,密钥并不总是相同的。如果是这种情况,您将需要提前编写一些内容来规范化数据。如果总是有一个像“员工”这样的“类型”,而这可能是什么的选择数量有限,你可以根据与类型的匹配来消除:
foreach($array as $key=>$val){
if(!in_array($val, $yourTypes)
// set the value to first or last depending on the order these come in
或者,如果有某种方法可以在数组到达用户拉取之前对其进行标准化,您应该尝试这样做以确保您知道哪个值正在命中查询。类似于 CSV 文件的常见输入格式 - 用户必须按精确顺序设置列 - 如果您可以对此进行更正,则可以解决它。如果能够创建命名键,这也可以解决它,尽管根据您从简单字符串中提取的内容,这看起来是不可能的。一个更激进的步骤是让管理员手动匹配每个字符串的映射程序:IE 每个字符串被分解并显示在屏幕上,每个键编号和相应的值,管理员可以选择哪个键是first_name,哪个键是last_name。
但是尝试基于未知的多个不同的数组结构进行拉取,可能是不可能的。这就是为什么 API 通常会有专门定义的键和输出 - 不知道这会给手动干预带来负担,就像我上面提到的映射一样。
TA贡献1829条经验 获得超9个赞
您可以使用list将分解后的数组字符串转换为变量。,,忽略前两个。
list(,, $fname, $lname) = explode(' ', $string);
这些成为声明的变量,可以像这样使用:
User::where('first_name', 'LIKE', "%{$fname}%")
->where('last_name', 'LIKE', "%{$lname}%")
->first();
TA贡献1840条经验 获得超5个赞
如果您一直在位置 0 和 1 上,您将拥有“员工”和“合同”,您可以使用以下内容:
unset($array[0], $array[1]);
$array = $array = array_values($array);
$user = User::where('first_name', 'LIKE', "%{$array[0]}%")->where('last_name', 'LIKE', "%{$array[1]}%")->first();
- 3 回答
- 0 关注
- 121 浏览
添加回答
举报